クラス コンストラクタの属性を取得し、コンストラクタのメタデータにアクセスできるようにします。
名前空間: System.Reflection
アセンブリ: mscorlib (mscorlib.dll 内)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
Public MustInherit Class ConstructorInfo
Inherits MethodBase
Implements _ConstructorInfo
Dim instance As ConstructorInfo
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public abstract class ConstructorInfo : MethodBase, _ConstructorInfo
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType::None)]
public ref class ConstructorInfo abstract : public MethodBase, _ConstructorInfo
/** @attribute SerializableAttribute() */
/** @attribute ComVisibleAttribute(true) */
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */
public abstract class ConstructorInfo extends MethodBase implements _ConstructorInfo
SerializableAttribute
ComVisibleAttribute(true)
ClassInterfaceAttribute(ClassInterfaceType.None)
public abstract class ConstructorInfo extends MethodBase implements _ConstructorInfo
コンストラクタの属性を取得するだけでなく、コンストラクタを呼び出すためにも、ConstructorInfo を使用します。オブジェクトは、Type オブジェクトの GetConstructors メソッドまたは GetConstructor メソッドによって返される ConstructorInfo で Invoke を呼び出すと作成されます。
メモ |
|---|
| ConstructorInfo は、ジェネリック メソッドを調べるために使用できる、IsGenericMethod など、複数の MethodBase メンバから継承されます。.NET Framework Version 2.0 では、コンストラクタをジェネリックにすることはできないため、これらのメンバは false または null 参照 (Visual Basic では Nothing) を返します。 |
継承時の注意 ConstructorInfo から継承する場合は、メンバのオーバーロードである Invoke(BindingFlags,Binder,Object[],CultureInfo) をオーバーライドする必要があります。
ConstructorInfo を GetConstructor および BindingFlags と併せて使用し、指定した検索条件と一致するコンストラクタを検索する例を次に示します。
Public Class MyClass1
Public Sub New(ByVal i As Integer)
End Sub
Public Shared Sub Main()
Try
Dim myType As Type = GetType(MyClass1)
Dim types(0) As Type
types(0) = GetType(Integer)
' Get the public instance constructor that takes an integer parameter.
Dim constructorInfoObj As ConstructorInfo = _
myType.GetConstructor(BindingFlags.Instance Or _
BindingFlags.Public, Nothing, _
CallingConventions.HasThis, types, Nothing)
If Not (constructorInfoObj Is Nothing) Then
Console.WriteLine("The constructor of MyClass1 that " + _
"is a public instance method and takes an " + _
"integer as a parameter is: ")
Console.WriteLine(constructorInfoObj.ToString())
Else
Console.WriteLine("The constructor MyClass1 that " + _
"is a public instance method and takes an " + _
"integer as a parameter is not available.")
End If
Catch e As ArgumentNullException
Console.WriteLine("ArgumentNullException: " + e.Message)
Catch e As ArgumentException
Console.WriteLine("ArgumentException: " + e.Message)
Catch e As SecurityException
Console.WriteLine("SecurityException: " + e.Message)
Catch e As Exception
Console.WriteLine("Exception: " + e.Message)
End Try
End Sub
End Class
using System;
using System.Reflection;
using System.Security;
public class MyClass1
{
public MyClass1(int i){}
public static void Main()
{
try
{
Type myType = typeof(MyClass1);
Type[] types = new Type[1];
types[0] = typeof(int);
// Get the public instance constructor that takes an integer parameter.
ConstructorInfo constructorInfoObj = myType.GetConstructor(
BindingFlags.Instance | BindingFlags.Public, null,
CallingConventions.HasThis, types, null);
if(constructorInfoObj != null)
{
Console.WriteLine("The constructor of MyClass1 that is a public " +
"instance method and takes an integer as a parameter is: ");
Console.WriteLine(constructorInfoObj.ToString());
}
else
{
Console.WriteLine("The constructor of MyClass1 that is a public instance " +
"method and takes an integer as a parameter is not available.");
}
}
catch(ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: " + e.Message);
}
catch(ArgumentException e)
{
Console.WriteLine("ArgumentException: " + e.Message);
}
catch(SecurityException e)
{
Console.WriteLine("SecurityException: " + e.Message);
}
catch(Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
}
}
using namespace System;
using namespace System::Reflection;
using namespace System::Security;
public ref class MyClass1
{
public:
MyClass1( int i ){}
};
int main()
{
try
{
Type^ myType = MyClass1::typeid;
array<Type^>^types = gcnew array<Type^>(1);
types[ 0 ] = int::typeid;
// Get the public instance constructor that takes an integer parameter.
ConstructorInfo^ constructorInfoObj = myType->GetConstructor( static_cast<BindingFlags>(BindingFlags::Instance | BindingFlags::Public), nullptr, CallingConventions::HasThis, types, nullptr );
if ( constructorInfoObj != nullptr )
{
Console::WriteLine( "The constructor of MyClass1 that is a public instance method and takes an integer as a parameter is: " );
Console::WriteLine( constructorInfoObj );
}
else
{
Console::WriteLine( "The constructor of MyClass1 that is a public instance method and takes an integer as a parameter is not available." );
}
}
catch ( ArgumentNullException^ e )
{
Console::WriteLine( "ArgumentNullException: {0}", e->Message );
}
catch ( ArgumentException^ e )
{
Console::WriteLine( "ArgumentException: {0}", e->Message );
}
catch ( SecurityException^ e )
{
Console::WriteLine( "SecurityException: {0}", e->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception: {0}", e->Message );
}
}
import System.*;
import System.Reflection.*;
import System.Security.*;
public class MyClass1
{
public MyClass1(int i)
{
} //MyClass1
public static void main(String[] args)
{
try {
Type myType = MyClass1.class.ToType();
Type types[] = new Type[1];
types.set_Item(0, int.class.ToType());
// Get the public instance constructor that takes an
// integer parameter.
ConstructorInfo constructorInfoObj =
myType.GetConstructor(BindingFlags.Instance|BindingFlags.Public,
null, CallingConventions.HasThis, types, null);
if (constructorInfoObj != null) {
Console.WriteLine("The constructor of MyClass1 that is a public "
+ "instance method and takes an integer as a parameter is: ");
Console.WriteLine(constructorInfoObj.ToString());
}
else {
Console.WriteLine("The constructor of MyClass1 that is a "
+ "public instance method and takes an integer "
+ "as a parameter is not available.");
}
}
catch (ArgumentNullException e) {
Console.WriteLine("ArgumentNullException: " + e.get_Message());
}
catch (ArgumentException e) {
Console.WriteLine("ArgumentException: " + e.get_Message());
}
catch (SecurityException e) {
Console.WriteLine("SecurityException: " + e.get_Message());
}
catch (System.Exception e) {
Console.WriteLine("Exception: " + e.get_Message());
}
} //main
} //MyClass1
System.Object
System.Reflection.MemberInfo
System.Reflection.MethodBase
System.Reflection.ConstructorInfo
Microsoft.JScript.JSConstructor
System.Reflection.Emit.ConstructorBuilder
この型は、マルチスレッド操作に対して安全です。
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
.NET Framework
サポート対象 : 2.0、1.1、1.0
.NET Compact Framework
サポート対象 : 2.0、1.0