Type.GetConstructors メソッド

定義

現在の Type のコンストラクターを取得します。Gets the constructors of the current Type.

オーバーロード

GetConstructors()

現在の Type に対して定義されているパブリック コンストラクターをすべて返します。Returns all the public constructors defined for the current Type.

GetConstructors(BindingFlags)

派生クラス内でオーバーライドされた場合、指定した BindingFlags を使用して、現在の Type に対して定義されているコンストラクターを検索します。When overridden in a derived class, searches for the constructors defined for the current Type, using the specified BindingFlags.

GetConstructors()

現在の Type に対して定義されているパブリック コンストラクターをすべて返します。Returns all the public constructors defined for the current Type.

public:
 virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors ();
abstract member GetConstructors : unit -> System.Reflection.ConstructorInfo[]
override this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
Public Function GetConstructors () As ConstructorInfo()

戻り値

現在の ConstructorInfo に対して定義されたすべてのパブリック インスタンス コンストラクター (ただし、型初期化子 (静的コンストラクター) を除く) を表している Type オブジェクトの配列。An array of ConstructorInfo objects representing all the public instance constructors defined for the current Type, but not including the type initializer (static constructor). パブリック インスタンス コンストラクターが現在の Type に対して定義されている場合、または現在の Type がジェネリック型またはジェネリック メソッドの定義の型パラメーターを表している場合は、型 ConstructorInfo の空の配列が返されます。If no public instance constructors are defined for the current Type, or if the current Type represents a type parameter in the definition of a generic type or generic method, an empty array of type ConstructorInfo is returned.

実装

属性

この例では、2つGetConstructorsのインスタンスコンストラクターと1つの静的コンストラクターを持つクラスからのオーバーロードの出力を示します。This example shows the output of the GetConstructors overload from a class that has two instance constructors and one static constructor.

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);
        }
    }
}
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

このコードの出力は次のとおりです。The output of this code is:

22

FalseFalse

FalseFalse

IsStatic forオーバーロードではとBindingFlags.Public BindingFlags.Instanceのみが使用されるため、静的コンストラクターは式によってカウントされることも、によって評価されることもありません。 GetConstructors()Because the GetConstructors() overload uses only BindingFlags.Public and BindingFlags.Instance, the static constructor is neither counted by the for expression nor evaluated by IsStatic.

静的コンストラクターを検索するにはGetConstructors(BindingFlags) 、次のコード例に示すように、 BindingFlags.Publicオーバーロードを使用BindingFlags.Instanceし、、、 OR BindingFlags.Static BindingFlags.NonPublic、の組み合わせ (論理) を渡します。To find static constructors, use the GetConstructors(BindingFlags) overload, and pass the combination (logical OR) of BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, as shown in the following code example:

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);
        }
    }
}
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

出力は次のようになります。Now the output is:

33

FalseFalse

TrueTrue

FalseFalse

注釈

メソッドGetConstructorsは、宣言の順序など、特定の順序でコンストラクターを返しません。The GetConstructors method does not return constructors in a particular order, such as declaration order. コードは、コンストラクターが返される順序に依存しないようにする必要があります。これは、その順序が異なるためです。Your code must not depend on the order in which constructors are returned, because that order varies.

次の表は、型に対してリフレクションを行うときにGet 、メソッドによって返される基底クラスのメンバーを示しています。The following table shows what members of a base class are returned by the Get methods when reflecting on a type.

メンバーの型Member Type スタティックStatic 非静的Non-Static
コンストラクターConstructor いいえNo いいえNo
フィールドField いいえNo はい。Yes. フィールドは、常に名前と署名で隠ぺいされます。A field is always hide-by-name-and-signature.
eventEvent 利用不可Not applicable 共通型システムの規則は、継承が、プロパティを実装するメソッドと同じであることを示します。The common type system rule is that the inheritance is the same as that of the methods that implement the property. リフレクションは、プロパティを名前で隠す、署名として扱います。Reflection treats properties as hide-by-name-and-signature. 下記のメモ2を参照してください。See note 2 below.
メソッドMethod いいえNo はい。Yes. メソッド (仮想と非仮想の両方) は、非表示にするか、名前と署名を隠すことができます。A method (both virtual and non-virtual) can be hide-by-name or hide-by-name-and-signature.
入れ子にされた型Nested Type いいえNo いいえNo
プロパティProperty 利用不可Not applicable 共通型システムの規則は、継承が、プロパティを実装するメソッドと同じであることを示します。The common type system rule is that the inheritance is the same as that of the methods that implement the property. リフレクションは、プロパティを名前で隠す、署名として扱います。Reflection treats properties as hide-by-name-and-signature. 下記のメモ2を参照してください。See note 2 below.
  1. 名前による隠ぺいと署名では、カスタム修飾子、戻り値の型、パラメーターの型、sentinel、アンマネージ呼び出し規約を含む、シグネチャのすべての部分が考慮されます。Hide-by-name-and-signature considers all of the parts of the signature, including custom modifiers, return types, parameter types, sentinels, and unmanaged calling conventions. これは、バイナリ比較です。This is a binary comparison.

  2. リフレクションの場合、プロパティとイベントは、名前とシグネチャが隠ぺいされます。For reflection, properties and events are hide-by-name-and-signature. 基底クラスに get と set の両方のアクセサーを持つプロパティがあり、派生クラスに get アクセサーのみがある場合、派生クラスのプロパティは基底クラスのプロパティを非表示にします。基底クラスの setter にアクセスすることはできません。If you have a property with both a get and a set accessor in the base class, but the derived class has only a get accessor, the derived class property hides the base class property, and you will not be able to access the setter on the base class.

  3. カスタム属性は、共通型システムの一部ではありません。Custom attributes are not part of the common type system.

このメソッドオーバーロードはGetConstructors(BindingFlags) 、( | BindingFlags.Instance BindingFlags.Public VisualBasic)BindingFlags.Publicを使用してメソッドのオーバーロードを呼び出します。Or BindingFlags.InstanceThis method overload calls the GetConstructors(BindingFlags) method overload, with BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance in Visual Basic). クラス初期化子 (静的コンストラクター) は見つかりません。It will not find class initializers (static constructor). クラス初期化子を検索するには、をBindingFlags受け取るオーバーロードをBindingFlags.Static使用BindingFlags.Staticして、 | BindingFlags.NonPublic (Or BindingFlags.NonPublic Visual Basic) を指定します。To find class initializers, use an overload that takes BindingFlags, and specify BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic in Visual Basic). また、 TypeInitializerプロパティを使用してクラス初期化子を取得することもできます。You can also get the class initializer using the TypeInitializer property.

現在Typeのが構築ジェネリック型を表している場合、このConstructorInfoメソッドは、適切な型引数によって置き換えられた型パラメーターを持つオブジェクトを返します。If the current Type represents a constructed generic type, this method returns the ConstructorInfo objects with the type parameters replaced by the appropriate type arguments. たとえばC<T> 、クラスにコンストラクター C(T t1) (Sub New(ByVal t1 As T) Visual Basic) がある場合、に対しGetConstructorsC<int>を呼び出すと、 C#のSub New(ByVal t1 As Integer)を表すC(int t1)ConstructorInfo返されます (ビジュアルの場合)。基本)。For example, if class C<T> has a constructor C(T t1) (Sub New(ByVal t1 As T) in Visual Basic), calling GetConstructors on C<int> returns a ConstructorInfo that represents C(int t1) in C# (Sub New(ByVal t1 As Integer) in Visual Basic).

現在Typeのがジェネリック型パラメーターを表しているGetConstructors場合、メソッドは空の配列を返します。If the current Type represents a generic type parameter, the GetConstructors method returns an empty array.

こちらもご覧ください

GetConstructors(BindingFlags)

派生クラス内でオーバーライドされた場合、指定した BindingFlags を使用して、現在の Type に対して定義されているコンストラクターを検索します。When overridden in a derived class, searches for the constructors defined for the current Type, using the specified BindingFlags.

public:
 abstract cli::array <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[]
Public MustOverride Function GetConstructors (bindingAttr As BindingFlags) As ConstructorInfo()

パラメーター

bindingAttr
BindingFlags

検索を実施する方法を指定する列挙値のビットごとの組み合わせ。A bitwise combination of the enumeration values that specify how the search is conducted.

- または --or- 空の配列を返す場合は DefaultDefault to return an empty array.

戻り値

現在の ConstructorInfo にコンストラクターが定義されている場合は、型初期化子を含め、定義されているコンストラクターのうち指定したバインディング制約に一致するすべてのコンストラクターを表す Type オブジェクトの配列。An array of ConstructorInfo objects representing all constructors defined for the current Type that match the specified binding constraints, including the type initializer if it is defined. 現在の Type に対してコンストラクターが定義されていない場合、または現在の Type がジェネリック型またはジェネリック メソッドの定義の型パラメーターを表している場合は、型 ConstructorInfo の空の配列を返します。Returns an empty array of type ConstructorInfo if no constructors are defined for the current Type, if none of the defined constructors match the binding constraints, or if the current Type represents a type parameter in the definition of a generic type or generic method.

実装

属性

この例では、2つGetConstructors()のインスタンスコンストラクターと1つの静的コンストラクターを持つクラスからのオーバーロードの出力を示します。This example shows the output of the GetConstructors() overload from a class that has two instance constructors and one static constructor.

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);
        }
    }
}
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

このコードの出力は次のとおりです。The output of this code is:

22

FalseFalse

FalseFalse

IsStatic forオーバーロードではとPublic Instanceのみが使用されるため、静的コンストラクターは式によってカウントされることも、によって評価されることもありません。 GetConstructorsBecause the GetConstructors overload uses only Public and Instance, the static constructor is neither counted by the for expression nor evaluated by IsStatic.

静的コンストラクターを検索するにはGetConstructors 、次のコード例に示すように、オーバーロードをBindingFlags.Public使用してBindingFlags.Instance、、、、 BindingFlags.StaticBindingFlags.NonPublic組み合わせ (論理 OR) を渡します。To find static constructors, use the GetConstructors overload, and pass it the combination (logical OR) of BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, as shown in the following code example:

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);
        }
    }
}
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

出力は次のようになります。Now the output is:

33

FalseFalse

TrueTrue

FalseFalse

注釈

bindingAttrパブリックコンストラクターだけを返すか、パブリックコンストラクターと非パブリックコンストラクターの両方を返すかを指定するために使用できます。bindingAttr can be used to specify whether to return only public constructors or both public and non-public constructors.

BindingFlagsのフィルターフラグを使用して、検索に含めるコンストラクターを定義できます。The following BindingFlags filter flags can be used to define which constructors to include in the search:

  • BindingFlags.Static共にBindingFlags.NonPublicを指定して、クラス初期化子 (静的コンストラクター) を取得します。Specify BindingFlags.Static along with BindingFlags.NonPublic to retrieve the class initializer (static constructor). また、 TypeInitializerプロパティを使用してクラス初期化子を取得することもできます。You can also get the class initializer using the TypeInitializer property.

  • インスタンスBindingFlags.Instanceコンストラクターを取得するにはBindingFlags.PublicBindingFlags.NonPublicとの一方または両方と共にを指定します。Specify BindingFlags.Instance along with one or both of BindingFlags.Public and BindingFlags.NonPublic to retrieve instance constructors.

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

メソッドGetConstructorsは、宣言の順序など、特定の順序でコンストラクターを返しません。The GetConstructors method does not return constructors in a particular order, such as declaration order. コードは、コンストラクターが返される順序に依存しないようにする必要があります。これは、その順序が異なるためです。Your code must not depend on the order in which constructors are returned, because that order varies.

現在Typeのが構築ジェネリック型を表している場合、このConstructorInfoメソッドは、適切な型引数によって置き換えられた型パラメーターを持つオブジェクトを返します。If the current Type represents a constructed generic type, this method returns the ConstructorInfo objects with the type parameters replaced by the appropriate type arguments. たとえばC<T> 、クラスにコンストラクター C(T t1) (Sub New(ByVal t1 As T) Visual Basic) がある場合、に対しGetConstructorsC<int>を呼び出すと、 C#のSub New(ByVal t1 As Integer)を表すC(int t1)ConstructorInfo返されます (ビジュアルの場合)。基本)。For example, if class C<T> has a constructor C(T t1) (Sub New(ByVal t1 As T) in Visual Basic), calling GetConstructors on C<int> returns a ConstructorInfo that represents C(int t1) in C# (Sub New(ByVal t1 As Integer) in Visual Basic).

現在Typeのがジェネリック型パラメーターを表しているGetConstructors場合、メソッドは空の配列を返します。If the current Type represents a generic type parameter, the GetConstructors method returns an empty array.

こちらもご覧ください

適用対象