次の方法で共有


Type.GetConstructors メソッド

定義

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

オーバーロード

名前 説明
GetConstructors()

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

GetConstructors(BindingFlags)

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

この例では、2 つのインスタンス コンストラクターと 1 つの静的コンストラクターを持つクラスからの GetConstructors() オーバーロードの出力を示します。

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オーバーロードはPublicInstanceのみを使用するため、静的コンストラクターはfor式によってカウントも、IsStaticによって評価もされません。

静的コンストラクターを検索するには、 GetConstructors オーバーロードを使用し、次のコード例に示すように、 BindingFlags.PublicBindingFlags.StaticBindingFlags.NonPublicBindingFlags.Instanceの組み合わせ (論理 OR) を渡します。

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.cs
ソース:
Type.cs

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

public:
 cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public:
 virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
public System.Reflection.ConstructorInfo[] GetConstructors();
public System.Reflection.ConstructorInfo[] GetConstructors();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)>]
member this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
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()

戻り値

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

実装

属性

注釈

.NET 6 以前のバージョンでは、 GetConstructors メソッドは宣言順序などの特定の順序でコンストラクターを返しません。 コンストラクターが返される順序に依存しないコードは、順序が異なるためです。 ただし、.NET 7 以降では、順序はアセンブリ内のメタデータの順序に基づいて決定論的です。

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

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

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

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

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

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

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

こちらもご覧ください

適用対象

GetConstructors(BindingFlags)

ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs

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

public:
 abstract cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors(System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
public abstract 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);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)>]
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
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.PublicBindingFlags.NonPublicの一方または両方と共にBindingFlags.Instanceを指定します。

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

.NET 6 以前のバージョンでは、 GetConstructors メソッドは宣言順序などの特定の順序でコンストラクターを返しません。 コンストラクターが返される順序に依存しないコードは、順序が異なるためです。 ただし、.NET 7 以降では、順序はアセンブリ内のメタデータの順序に基づいて決定論的です。

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

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

こちらもご覧ください

適用対象