Type.GetConstructors メソッド

定義

現在の Type のコンストラクターを取得します。

オーバーロード

GetConstructors()

現在の Type に対して定義されているパブリック コンストラクターをすべて返します。

GetConstructors(BindingFlags)

派生クラス内でオーバーライドされた場合、指定した BindingFlags を使用して、現在の Type に対して定義されているコンストラクターを検索します。

この例では、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

オーバーロードでは GetConstructorsInstanceのみがPublic使用されるため、静的コンストラクターは式によってカウントも、 によってIsStaticfor評価もされません。

静的コンストラクターを見つけるには、 オーバーロードをGetConstructors使用し、次のコード例に示すように、、BindingFlags.StaticBindingFlags.NonPublicBindingFlags.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 に対して定義されているパブリック コンストラクターをすべて返します。

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 を参照してください。
  1. 名前と署名による非表示は、カスタム修飾子、戻り値の型、パラメーター型、sentinel、アンマネージド呼び出し規則など、署名のすべての部分を考慮します。 これはバイナリ比較です。

  2. リフレクションの場合、プロパティとイベントは名前と署名によって非表示になります。 基底クラスに get アクセサーと set アクセサーの両方を持つプロパティがあるが、派生クラスに get アクセサーしかない場合、派生クラス プロパティは基底クラス プロパティを非表示にし、基底クラスのセッターにアクセスすることはできません。

  3. カスタム属性は、共通型システムの一部ではありません。

このメソッド オーバーロードは、 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 空の配列を返します。

こちらもご覧ください

適用対象

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()

パラメーター

bindingAttr
BindingFlags

検索を実施する方法を指定する列挙値のビットごとの組み合わせ。

または

空の配列を返す場合は Default

戻り値

指定したバインド制約に一致する現在Typeの コンストラクターに対して定義されているすべてのコンストラクターを表す オブジェクトの配列 ConstructorInfo 。定義されている場合は型初期化子も含まれます。 現在の Type に対してコンストラクターが定義されていない場合、または現在の Type がジェネリック型またはジェネリック メソッドの定義の型パラメーターを表している場合は、型 ConstructorInfo の空の配列を返します。

実装

属性

注釈

bindingAttr を使用して、パブリック コンストラクターのみを返すか、パブリック コンストラクターと非パブリック コンストラクターの両方を返すかを指定できます。

BindingFlags のフィルター フラグを使用して、検索に含めるコンストラクターを定義できます。

  • と 共BindingFlags.NonPublicに を指定BindingFlags.Staticして、クラス初期化子 (静的コンストラクター) を取得します。 プロパティを使用してクラス初期化子を TypeInitializer 取得することもできます。

  • インスタンス コンストラクターを取得するには、 と BindingFlags.NonPublicBindingFlags.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 空の配列を返します。

こちらもご覧ください

適用対象