Type.GetConstructors メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
現在の Type のコンストラクターを取得します。
オーバーロード
GetConstructors() |
現在の Type に対して定義されているパブリック コンストラクターをすべて返します。 |
GetConstructors(BindingFlags) |
派生クラス内でオーバーライドされた場合、指定した |
例
この例では、2 つのインスタンス コンストラクターと 1 つの静的コンストラクターを持つクラスからのオーバーロードの出力 GetConstructors() を示します。
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);
}
}
}
type t() =
static do ()
new(i: int) = t ()
let p = typeof<t>.GetConstructors()
printfn $"{p.Length}"
for c in p do
printfn $"{c.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 と InstanceのみがPublic使用されるため、静的コンストラクターは式によってカウントも、 によってIsStatic
for
評価もされません。
静的コンストラクターを見つけるには、 オーバーロードをGetConstructors使用し、次のコード例に示すように、、BindingFlags.Static、BindingFlags.NonPublic、BindingFlags.Instance、 のBindingFlags.Public組み合わせ (論理 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);
}
}
}
open System.Reflection
type t() =
static do ()
new (i: int) = t ()
let p = typeof<t>.GetConstructors(BindingFlags.Public ||| BindingFlags.Static ||| BindingFlags.NonPublic ||| BindingFlags.Instance)
printfn $"{p.Length}"
for c in p do
printfn $"{c.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.cs
- ソース:
- Type.cs
- ソース:
- Type.cs
現在の 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 の空の配列が返されます。
実装
- 属性
注釈
.NET 6 以前のバージョンでは、 GetConstructors メソッドは、宣言順序などの特定の順序でコンストラクターを返しません。 コンストラクターが返される順序に依存しないコードは、その順序が異なるためです。 ただし、.NET 7 以降では、順序付けはアセンブリ内のメタデータの順序に基づいて決定論的です。
次の表は、型に反映するときに メソッドによって Get
返される基底クラスのメンバーを示しています。
メンバーの型 | 静的 | 非静的 |
---|---|---|
コンストラクター | いいえ | いいえ |
フィールド | いいえ | はい。 フィールドは常に名前と署名で非表示になります。 |
Event | 適用なし | 一般的な型システムルールは、継承が プロパティを実装するメソッドの継承と同じであるという点です。 リフレクションでは、プロパティは名前と署名による非表示として扱います。 以下の注 2 を参照してください。 |
メソッド | いいえ | はい。 メソッド (仮想と非仮想の両方) は、名前で非表示にすることも、名前と署名で非表示にすることもできます。 |
入れ子になった型 | いいえ | いいえ |
プロパティ | 適用なし | 一般的な型システムルールは、継承が プロパティを実装するメソッドの継承と同じであるという点です。 リフレクションでは、プロパティは名前と署名による非表示として扱います。 以下の注 2 を参照してください。 |
名前と署名による非表示は、カスタム修飾子、戻り値の型、パラメーター型、sentinel、アンマネージド呼び出し規則など、署名のすべての部分を考慮します。 これはバイナリ比較です。
リフレクションの場合、プロパティとイベントは名前と署名によって非表示になります。 基底クラスに get アクセサーと set アクセサーの両方を持つプロパティがあるが、派生クラスに get アクセサーしかない場合、派生クラス プロパティは基底クラス プロパティを非表示にし、基底クラスのセッターにアクセスすることはできません。
カスタム属性は、共通型システムの一部ではありません。
このメソッド オーバーロードは、 GetConstructors(BindingFlags) (Visual Basic では )BindingFlags.PublicBindingFlags.InstanceOr
を使用してBindingFlags.Public | BindingFlags.Instanceメソッド オーバーロードを呼び出します。 クラス初期化子 (静的コンストラクター) は見つかりません。 クラス初期化子を検索するには、 を受け取るBindingFlagsオーバーロードを使用し、Visual Basic で (BindingFlags.StaticBindingFlags.NonPublicOr
を指定BindingFlags.Static | BindingFlags.NonPublicします)。 プロパティを使用してクラス初期化子を TypeInitializer 取得することもできます。
現在 Type の が構築されたジェネリック型を表す場合、このメソッドは、適切な型引数に置き換えられた型パラメーターを持つオブジェクトを返 ConstructorInfo します。 たとえば、クラスC<T>
にコンストラクター C(T t1)
(Sub New(ByVal t1 As T)
Visual Basic の場合) がある場合、 で C<int>
を呼び出すとGetConstructors、C# (Visual Basic では)Sub New(ByVal t1 As Integer)
で表す C(int t1)
が返されますConstructorInfo。
現在 Type の がジェネリック型パラメーターを表す場合、メソッドは GetConstructors 空の配列を返します。
こちらもご覧ください
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
適用対象
GetConstructors(BindingFlags)
- ソース:
- Type.cs
- ソース:
- Type.cs
- ソース:
- Type.cs
派生クラス内でオーバーライドされた場合、指定した 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()
パラメーター
戻り値
指定したバインド制約に一致する現在Typeの コンストラクターに対して定義されているすべてのコンストラクターを表す オブジェクトの配列 ConstructorInfo 。定義されている場合は型初期化子も含まれます。 現在の Type に対してコンストラクターが定義されていない場合、または現在の Type がジェネリック型またはジェネリック メソッドの定義の型パラメーターを表している場合は、型 ConstructorInfo の空の配列を返します。
実装
- 属性
注釈
bindingAttr
を使用して、パブリック コンストラクターのみを返すか、パブリック コンストラクターと非パブリック コンストラクターの両方を返すかを指定できます。
次 BindingFlags のフィルター フラグを使用して、検索に含めるコンストラクターを定義できます。
と 共
BindingFlags.NonPublic
に を指定BindingFlags.Static
して、クラス初期化子 (静的コンストラクター) を取得します。 プロパティを使用してクラス初期化子を TypeInitializer 取得することもできます。インスタンス コンストラクターを取得するには、 と
BindingFlags.NonPublic
のBindingFlags.Public
一方または両方と共に を指定BindingFlags.Instance
します。
詳細については、「System.Reflection.BindingFlags」を参照してください。
.NET 6 以前のバージョンでは、 GetConstructors メソッドは、宣言順序などの特定の順序でコンストラクターを返しません。 コンストラクターが返される順序に依存しないコードは、その順序が異なるためです。 ただし、.NET 7 以降では、順序付けはアセンブリ内のメタデータの順序に基づいて決定論的です。
現在 Type の が構築されたジェネリック型を表す場合、このメソッドは、適切な型引数に置き換えられた型パラメーターを持つオブジェクトを返 ConstructorInfo します。 たとえば、クラスC<T>
にコンストラクター C(T t1)
(Sub New(ByVal t1 As T)
Visual Basic の場合) がある場合、 で C<int>
を呼び出すとGetConstructors、C# (Visual Basic では)Sub New(ByVal t1 As Integer)
で表す C(int t1)
が返されますConstructorInfo。
現在 Type の がジェネリック型パラメーターを表す場合、メソッドは GetConstructors 空の配列を返します。
こちらもご覧ください
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
適用対象
.NET