Type.GetConstructors Type.GetConstructors Type.GetConstructors Type.GetConstructors Method

定義

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

オーバーロード

GetConstructors() GetConstructors() GetConstructors() GetConstructors()

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

GetConstructors(BindingFlags) GetConstructors(BindingFlags) GetConstructors(BindingFlags) GetConstructors(BindingFlags)

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

GetConstructors() GetConstructors() GetConstructors() 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.

実装

この例の出力を示しています、 GetConstructors 2 つのインスタンス コンス トラクターと 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
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

GetConstructors()のみに使用するオーバー ロードBindingFlags.PublicBindingFlags.Instance、静的コンス トラクターはカウントも、for式によって評価もIsStaticします。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) 、オーバー ロードし、組み合わせを渡す (論理OR) のBindingFlags.PublicBindingFlags.StaticBindingFlags.NonPublicBindingFlags.Instance次のコード例のように。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
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 アクセサーのみ、基本クラスに、get と set アクセサーの両方を持つプロパティがある場合は、派生クラスのプロパティには、基底クラスのプロパティが非表示にし、基本クラスの set アクセス操作子にアクセスすることはできません。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.Public | BindingFlags.Instance (BindingFlags.Public Or BindingFlags.Instance Visual Basic で)。This 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.NonPublic (BindingFlags.Static 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>を返します、ConstructorInfoを表すC(int t1)(C#) (Sub New(ByVal t1 As Integer) Visual Basic で)。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) GetConstructors(BindingFlags) GetConstructors(BindingFlags) 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 BindingFlags BindingFlags 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.

実装

この例の出力を示しています、 GetConstructors() 2 つのインスタンス コンス トラクターと 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
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

GetConstructorsのみに使用するオーバー ロードPublicInstance、静的コンス トラクターはカウントも、for式によって評価もIsStaticします。Because the GetConstructors overload uses only Public and Instance, the static constructor is neither counted by the for expression nor evaluated by IsStatic.

静的コンス トラクターを検索するには、使用、 GetConstructors 、オーバー ロードし、の組み合わせ (論理 OR) を渡すBindingFlags.PublicBindingFlags.StaticBindingFlags.NonPublicBindingFlags.Instance次のコード例のように。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
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>を返します、ConstructorInfoを表すC(int t1)(C#) (Sub New(ByVal t1 As Integer) Visual Basic で)。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.

こちらもご覧ください

適用対象