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

オーバーロードが GetConstructors 使用するのは唯一 Public のものであり Instance、静的コンストラクターは式によって for カウントも評価も IsStaticされないためです。

静的コンストラクターを見つけるには、オーバーロードをGetConstructors使用し、次のコード例に示すように 、, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.InstanceBindingFlags.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[]

現在の ConstructorInfo に対して定義されたすべてのパブリック インスタンス コンストラクター (ただし、型初期化子 (静的コンストラクター) を除く) を表している Type オブジェクトの配列。 パブリック インスタンス コンストラクターが現在の Type に対して定義されている場合、または現在の Type がジェネリック型またはジェネリック メソッドの定義の型パラメーターを表している場合は、型 ConstructorInfo の空の配列が返されます。

実装

属性

注釈

メソッドは GetConstructors 、宣言順序などの特定の順序でコンストラクターを返しません。 コンストラクターが返される順序に依存しないコードは、その順序が異なるためです。

次の表は、型に反映するときにメソッドによって Get 返される基底クラスのメンバーを示しています。

メンバーの型 静的 非静的
コンストラクター いいえ いいえ
フィールド いいえ はい。 フィールドは常に名前と署名で非表示になります。
Event 適用なし 一般的な型システムルールは、継承がプロパティを実装するメソッドの継承と同じであるということです。 リフレクションは、プロパティを名前とシグネチャによる非表示として扱います。 以下の注 2 を参照してください。
メソッド いいえ はい。 メソッド (仮想と非仮想の両方) は、名前で非表示にすることも、名前とシグネチャで非表示にすることもできます。
入れ子になった型 いいえ いいえ
プロパティ 適用なし 一般的な型システムルールは、継承がプロパティを実装するメソッドの継承と同じであるということです。 リフレクションは、プロパティを名前とシグネチャによる非表示として扱います。 以下の注 2 を参照してください。
  1. 名前と署名による非表示では、カスタム修飾子、戻り値の型、パラメーターの型、センチネル、アンマネージ呼び出し規則など、署名のすべての部分が考慮されます。 これはバイナリ比較です。

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

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

このメソッド オーバーロードは、| (BindingFlags.PublicOrBindingFlags.InstanceVisual Basic BindingFlags.Instance ) を使用BindingFlags.Publicして、メソッドのオーバーロードを呼び出します。GetConstructors(BindingFlags) クラス初期化子 (静的コンストラクター) は見つかりません。 クラス初期化子を検索するには、| (BindingFlags.StaticOrBindingFlags.NonPublicVisual Basic BindingFlags.NonPublic ) を受け取りBindingFlags、指定BindingFlags.Staticするオーバーロードを使用します。 プロパティを使用してクラス初期化子を TypeInitializer 取得することもできます。

現在 Type の値が構築されたジェネリック型を表す場合、このメソッドは、適切な型引数に置き換えられた型パラメーターを持つオブジェクトを返 ConstructorInfo します。 たとえば、クラスC<T>にコンストラクター C(T t1) (Sub New(ByVal t1 As T)Visual Basic) がある場合、呼び出しGetConstructorsC<int>は C# (Sub New(ByVal t1 As Integer)Visual Basic) で表す C(int t1) a を返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

戻り値

ConstructorInfo[]

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

実装

属性

注釈

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

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

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

  • インスタンス コンストラクターのBindingFlags.Public一方または両方と共に指定BindingFlags.InstanceBindingFlags.NonPublic、インスタンス コンストラクターを取得します。

詳細については、「System.Reflection.BindingFlags」を参照してください。

メソッドは GetConstructors 、宣言の順序など、特定の順序でコンストラクターを返しません。 コンストラクターが返される順序に依存しないコードは、その順序が異なるためです。

現在 Type の値が構築されたジェネリック型を表す場合、このメソッドは、適切な型引数に置き換えられた型パラメーターを持つオブジェクトを返 ConstructorInfo します。 たとえば、クラスC<T>にコンストラクター C(T t1) (Sub New(ByVal t1 As T)Visual Basic) がある場合、呼び出しGetConstructorsC<int>は C# (Sub New(ByVal t1 As Integer)Visual Basic) で表す C(int t1) a を返ConstructorInfoします。

現在 Type の値がジェネリック型パラメーターを表す場合、メソッドは GetConstructors 空の配列を返します。

こちらもご覧ください

適用対象