次の方法で共有


Type.GetConstructors メソッド ()

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

Overloads Public Function GetConstructors() As ConstructorInfo()
[C#]
public ConstructorInfo[] GetConstructors();
[C++]
public: ConstructorInfo* GetConstructors() [];
[JScript]
public function GetConstructors() : ConstructorInfo[];

戻り値

現在の Type にパブリック コンストラクタが定義されている場合は、型初期化子も含め、それらのコンストラクタすべてを表す ConstructorInfo オブジェクトの配列。

または

現在の Type にパブリック コンストラクタが定義されていない場合は、 ConstructorInfo 型の空の配列。

解説

型に対するリフレクション時に Get メソッドによって返される基本クラスのメンバを次の表に示します。

メンバ型 静的 非静的
コンストラクタ いいえ いいえ
フィールド いいえ はい。フィールドは常に名前と署名によって隠ぺいされます。
イベント 適用なし 共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。
メソッド いいえ はい。メソッド (仮想メソッドと非仮想メソッドの両方) は、名前によって隠蔽することもできますし、名前と署名によって隠蔽することもできます。
入れ子になった型 いいえ いいえ
プロパティ 適用なし 共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。
  1. 名前と署名による隠ぺいでは、カスタム修飾子、戻り値の型、パラメータの型、sentinel、およびアンマネージ呼び出し規約を含めて、署名のすべての部分が判断の対象となります。これはバイナリ比較です。
  2. リフレクションの場合、プロパティおよびイベントは名前と署名によって隠ぺいされています。基本クラスに get アクセサと set アクセサの両方を持つプロパティがあり、派生クラスには get アクセサしかない場合、派生クラスのプロパティにより基本クラスのプロパティが隠ぺいされ、基本クラスの set アクセサにはアクセスできません。
  3. カスタム属性は、共通の型システムの一部ではありません。

このメソッドは Type.GetConstructors メソッド (BindingFlags) を呼び出します。例に示すように BindingFlags.Static を明示的に渡さない限り、静的コンストラクタは検索されません。

クラス初期化子は、 GetMemberGetMembersFindMembers 、および GetConstructors を通じて使用できます。

使用例

2 つのインスタンス コンストラクタと 1 つの静的コンストラクタを持つクラスからの GetConstructors() () の出力例を次に示します。

 
Imports System
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

[C#] 
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);
        }
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Reflection;

public __gc class t {
public:
    t() {}
    static t() {}
    t(int /*i*/) {}
};

int main() {
    ConstructorInfo* p[] = __typeof(t)->GetConstructors();
    Console::WriteLine(p->Length);

    for (int i=0;i<p->Length;i++) {
        Console::WriteLine(p[i]->IsStatic);
    }
}

[JScript] 
import System;
import System.Reflection;

public class t {
    public function t() {}
    static t {}
    public function t(i : int) {}

    public static function Main(): void  {
        var p : ConstructorInfo[] = t.GetConstructors();
        Console.WriteLine(p.Length);

        for (var i : int =0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}
t.Main();

このコードの出力は次のとおりです。

2

False

False

GetConstructors () は Public および Instance の BindingFlags だけを呼び出すため、静的コンストラクタに対しては、for 式によるカウントも、 IsStatic による評価も行われません。

次のように、 GetConstructors (BindingFlags) を使用して BindingFlags を BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance に渡し、静的コンストラクタを検索します。

 
Imports System
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

[C#] 
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);
        }
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Reflection;

public __gc class t {
public:
    t() {}
    t(int /*i*/) {}
    static t() {}
};

int main() {
    ConstructorInfo* p[] = __typeof(t)->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);
    }
}

[JScript] 
import System;
import System.Reflection;
 
public class t {
    public function t() {}
    static t {}
    public function t(i : int) {}

    public static function Main() : void  {
        var p : ConstructorInfo[] = t.GetConstructors(
           BindingFlags.Public | BindingFlags.Static |
           BindingFlags.NonPublic | BindingFlags.Instance);
        Console.WriteLine(p.Length);

        for (var i:int=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}
t.Main();

この出力は次のようになります。

3

False

True

False

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Type クラス | Type メンバ | System 名前空間 | Type.GetConstructors オーバーロードの一覧 | ConstructorInfo | GetConstructor