エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Type.GetConstructors メソッド

2013/12/12

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

Namespace:  System
アセンブリ:  mscorlib (mscorlib.dll 内)

public ConstructorInfo[] GetConstructors()

戻り値

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

GetConstructors メソッドから返されるコンストラクターは、宣言順などの特定の順序で返されるわけではありません。したがって、コンストラクターが返される順序に依存するようなコードは避ける必要があります。

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

メンバー型

静的

非静的

コンストラクター

いいえ

いいえ

フィールド

いいえ

はい。フィールドは常に名前と署名によって隠ぺいされます。

イベント

該当なし

共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。

メソッド

いいえ

はい。メソッド (仮想メソッドと非仮想メソッドの両方) は、名前によって隠ぺいすることも、名前と署名によって隠ぺいすることもできます。

入れ子にされた型

いいえ

いいえ

プロパティ

該当なし

共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。

メモ:

  1. 名前と署名による隠ぺいでは、カスタム修飾子、戻り値の型、パラメーターの型、sentinel、およびアンマネージ呼び出し規約を含めて、署名のすべての部分が判断の対象となります。これはバイナリ比較です。

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

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

このメソッド オーバーロードは、BindingFlags.Public | BindingFlags.Instance (Visual Basic の場合は BindingFlags.PublicOrBindingFlags.Instance) を使用して GetConstructors(BindingFlags) メソッド オーバーロードを呼び出します。このメソッド オーバーロードはクラス初期化子 (.cctor) を見つけません。クラス初期化子を見つけるには、BindingFlags を受け取るオーバーロードを使用し、BindingFlags.Static | BindingFlags.NonPublic (Visual Basic の場合は BindingFlags.StaticOrBindingFlags.NonPublic) を指定します。

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

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

この例は、パブリック インスタンス コンストラクター、プロテクト インスタンス コンストラクター、および静的コンストラクター (Visual Basic の場合は Shared コンストラクター) を持つクラスに対して 2 つの GetConstructors オーバーロードを呼び出した結果を示します。

GetConstructors() オーバーロードでは BindingFlags.PublicBindingFlags.Instance のみを使用するため、静的コンストラクターおよびプロテクト インスタンス コンストラクターは表示されません。

すべてのコンストラクターを見つけるには、GetConstructors(BindingFlags) オーバーロードを使用し、BindingFlags.PublicBindingFlags.StaticBindingFlags.NonPublicBindingFlags.Instance の組み合わせ (論理 OR) を使用します。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。


using System.Reflection;

public class Example
{
   protected Example() {}

   static Example() {}

   public Example(int i) {}

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      outputBlock.Text += "Constructors found by GetConstructors():\n";
      foreach (ConstructorInfo ci in typeof(Example).GetConstructors())
      {
         outputBlock.Text += ci.ToString() + "\n";
      }

      outputBlock.Text += "\nConstructors found by GetConstructors(BindingFlags):\n";
      foreach (ConstructorInfo ci in typeof(Example).GetConstructors(
         BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic |
         BindingFlags.Instance))
      {

         outputBlock.Text += ci.ToString() + "\n";
      }
   }
}

/* This example produces the following output:

Constructors found by GetConstructors():
Void .ctor(Int32)

Constructors found by GetConstructors(BindingFlags):
Void .ctor()
Void .cctor()
Void .ctor(Int32)
 */


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示:
© 2014 Microsoft