Type.GetConstructors メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
現在の Type のコンストラクターを取得します。
オーバーロード
GetConstructors() |
現在の Type に対して定義されているパブリック コンストラクターをすべて返します。 |
GetConstructors(BindingFlags) |
派生クラス内でオーバーライドされた場合、指定した |
例
この例では、 GetConstructors() 2 つのインスタンスコンストラクターと1つの静的コンストラクターを持つクラスからのオーバーロードの出力を示します。
using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
t(){}
static t(){}
t( int /*i*/ ){}
};
int main()
{
array<ConstructorInfo^>^p = t::typeid->GetConstructors();
Console::WriteLine( p->Length );
for ( int i = 0; i < p->Length; i++ )
{
Console::WriteLine( p[ i ]->IsStatic );
}
}
using System;
using System.Reflection;
public class t {
public t() {}
static t() {}
public t(int i) {}
public static void Main() {
ConstructorInfo[] p = typeof(t).GetConstructors();
Console.WriteLine(p.Length);
for (int i=0;i<p.Length;i++) {
Console.WriteLine(p[i].IsStatic);
}
}
}
Imports System.Reflection
Public Class t
Public Sub New()
End Sub
Shared Sub New()
End Sub
Public Sub New(i As Integer)
End Sub
Public Shared Sub Main()
Dim p As ConstructorInfo() = GetType(t).GetConstructors()
Console.WriteLine(p.Length)
Dim i As Integer
For i = 0 To p.Length - 1
Console.WriteLine(p(i).IsStatic)
Next i
End Sub
End Class
このコードの出力は次のとおりです。
2
False
False
オーバーロードで GetConstructors はとのみが使用されるため、 Public Instance 静的コンストラクターは式によってカウントされることも、によって評価されることもありません for
IsStatic
。
静的コンストラクターを検索するには、 GetConstructors BindingFlags.Public 次の BindingFlags.Static BindingFlags.NonPublic BindingFlags.Instance コード例に示すように、オーバーロードを使用して、、、、の組み合わせ (論理 OR) を渡します。
using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
t(){}
t( int /*i*/ ){}
static t(){}
};
int main()
{
array<ConstructorInfo^>^p = t::typeid->GetConstructors( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static | BindingFlags::NonPublic | BindingFlags::Instance) );
Console::WriteLine( p->Length );
for ( int i = 0; i < p->Length; i++ )
{
Console::WriteLine( p[ i ]->IsStatic );
}
}
using System;
using System.Reflection;
public class t {
public t() {}
static t() {}
public t(int i) {}
public static void Main() {
ConstructorInfo[] p = typeof(t).GetConstructors(
BindingFlags.Public | BindingFlags.Static |
BindingFlags.NonPublic | BindingFlags.Instance);
Console.WriteLine(p.Length);
for (int i=0;i<p.Length;i++) {
Console.WriteLine(p[i].IsStatic);
}
}
}
Imports System.Reflection
Public Class t
Public Sub New()
End Sub
Shared Sub New()
End Sub
Public Sub New(i As Integer)
End Sub
Public Shared Sub Main()
Dim p As ConstructorInfo() = GetType(T).GetConstructors( _
BindingFlags.Public Or _
BindingFlags.Static Or _
BindingFlags.NonPublic Or _
BindingFlags.Instance)
Console.WriteLine(p.Length)
Dim i As Integer
For i = 0 To p.Length - 1
Console.WriteLine(p(i).IsStatic)
Next i
End Sub
End Class
出力は次のようになります。
3
False
True
False
GetConstructors()
現在の Type に対して定義されているパブリック コンストラクターをすべて返します。
public:
cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public:
virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public System.Reflection.ConstructorInfo[] GetConstructors ();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors ();
member this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
abstract member GetConstructors : unit -> System.Reflection.ConstructorInfo[]
override this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
[<System.Runtime.InteropServices.ComVisible(true)>]
abstract member GetConstructors : unit -> System.Reflection.ConstructorInfo[]
override this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
Public Function GetConstructors () As ConstructorInfo()
戻り値
現在の ConstructorInfo に対して定義されたすべてのパブリック インスタンス コンストラクター (ただし、型初期化子 (静的コンストラクター) を除く) を表している Type オブジェクトの配列。 パブリック インスタンス コンストラクターが現在の Type に対して定義されている場合、または現在の Type がジェネリック型またはジェネリック メソッドの定義の型パラメーターを表している場合は、型 ConstructorInfo の空の配列が返されます。
実装
- 属性
注釈
メソッドは、 GetConstructors 宣言の順序など、特定の順序でコンストラクターを返しません。 コードは、コンストラクターが返される順序に依存しないようにする必要があります。これは、その順序が異なるためです。
次の表は、型に対してリフレクションを行うときに、メソッドによって返される基底クラスのメンバーを示してい Get
ます。
メンバーの型 | 静的 | 非静的 |
---|---|---|
コンストラクター | いいえ | いいえ |
フィールド | いいえ | はい。 フィールドは、常に名前と署名で隠ぺいされます。 |
Event | 適用なし | 共通型システムの規則は、継承が、プロパティを実装するメソッドと同じであることを示します。 リフレクションは、プロパティを名前で隠す、署名として扱います。 下記のメモ2を参照してください。 |
メソッド | いいえ | はい。 メソッド (仮想と非仮想の両方) は、非表示にするか、名前と署名を隠すことができます。 |
入れ子にされた型 | いいえ | いいえ |
プロパティ | 適用なし | 共通型システムの規則は、継承が、プロパティを実装するメソッドと同じであることを示します。 リフレクションは、プロパティを名前で隠す、署名として扱います。 下記のメモ2を参照してください。 |
名前による隠ぺいと署名では、カスタム修飾子、戻り値の型、パラメーターの型、sentinel、アンマネージ呼び出し規約を含む、シグネチャのすべての部分が考慮されます。 これは、バイナリ比較です。
リフレクションの場合、プロパティとイベントは、名前とシグネチャが隠ぺいされます。 基底クラスに get と set の両方のアクセサーを持つプロパティがあり、派生クラスに get アクセサーのみがある場合、派生クラスのプロパティは基底クラスのプロパティを非表示にします。基底クラスの setter にアクセスすることはできません。
カスタム属性は、共通型システムの一部ではありません。
このメソッドオーバーロードは GetConstructors(BindingFlags) 、 BindingFlags.Public | BindingFlags.Instance (Visual Basic) を使用してメソッドのオーバーロードを呼び出し BindingFlags.Public Or
BindingFlags.Instance ます。 クラス初期化子 (静的コンストラクター) は見つかりません。 クラス初期化子を検索するには、を受け取るオーバーロードを使用 BindingFlags し、 BindingFlags.Static | BindingFlags.NonPublic (Visual Basic) を指定し BindingFlags.Static Or
BindingFlags.NonPublic ます。 また、プロパティを使用してクラス初期化子を取得することもでき TypeInitializer ます。
現在のが Type 構築ジェネリック型を表している場合、このメソッドは、 ConstructorInfo 適切な型引数によって置き換えられた型パラメーターを持つオブジェクトを返します。 たとえば、クラスに C<T>
コンストラクター (Visual Basic) がある場合、 C(T t1)
Sub New(ByVal t1 As T)
GetConstructors に対してを呼び出すと、 C<int>
ConstructorInfo C(int t1)
C# の (Visual Basic) のを表すが返さ Sub New(ByVal t1 As Integer)
れます。
現在のが Type ジェネリック型パラメーターを表している場合、 GetConstructors メソッドは空の配列を返します。
こちらもご覧ください
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
適用対象
GetConstructors(BindingFlags)
派生クラス内でオーバーライドされた場合、指定した BindingFlags
を使用して、現在の Type に対して定義されているコンストラクターを検索します。
public:
abstract cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors(System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.ConstructorInfo[] GetConstructors (System.Reflection.BindingFlags bindingAttr);
[System.Runtime.InteropServices.ComVisible(true)]
public abstract System.Reflection.ConstructorInfo[] GetConstructors (System.Reflection.BindingFlags bindingAttr);
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
[<System.Runtime.InteropServices.ComVisible(true)>]
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
Public MustOverride Function GetConstructors (bindingAttr As BindingFlags) As ConstructorInfo()
パラメーター
戻り値
現在の ConstructorInfo にコンストラクターが定義されている場合は、型初期化子を含め、定義されているコンストラクターのうち指定したバインディング制約に一致するすべてのコンストラクターを表す Type オブジェクトの配列。 現在の Type に対してコンストラクターが定義されていない場合、または現在の Type がジェネリック型またはジェネリック メソッドの定義の型パラメーターを表している場合は、型 ConstructorInfo の空の配列を返します。
実装
- 属性
注釈
bindingAttr
パブリックコンストラクターだけを返すか、パブリックコンストラクターと非パブリックコンストラクターの両方を返すかを指定するために使用できます。
次の BindingFlags フィルターフラグを使用して、検索に含めるコンストラクターを定義できます。
と共にを指定し
BindingFlags.Static
てBindingFlags.NonPublic
、クラス初期化子 (静的コンストラクター) を取得します。 また、プロパティを使用してクラス初期化子を取得することもでき TypeInitializer ます。BindingFlags.Instance
BindingFlags.Public
BindingFlags.NonPublic
インスタンスコンストラクターを取得するには、との一方または両方と共にを指定します。
詳細については、「System.Reflection.BindingFlags」を参照してください。
メソッドは、 GetConstructors 宣言の順序など、特定の順序でコンストラクターを返しません。 コードは、コンストラクターが返される順序に依存しないようにする必要があります。これは、その順序が異なるためです。
現在のが Type 構築ジェネリック型を表している場合、このメソッドは、 ConstructorInfo 適切な型引数によって置き換えられた型パラメーターを持つオブジェクトを返します。 たとえば、クラスに C<T>
コンストラクター (Visual Basic) がある場合、 C(T t1)
Sub New(ByVal t1 As T)
GetConstructors に対してを呼び出すと、 C<int>
ConstructorInfo C(int t1)
C# の (Visual Basic) のを表すが返さ Sub New(ByVal t1 As Integer)
れます。
現在のが Type ジェネリック型パラメーターを表している場合、 GetConstructors メソッドは空の配列を返します。
こちらもご覧ください
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])