Type.GetConstructors 메서드

정의

현재 Type의 생성자를 가져옵니다.

오버로드

GetConstructors()

현재 Type에 대해 정의된 모든 public 생성자를 반환합니다.

GetConstructors(BindingFlags)

파생 클래스에서 재정의되면, 현재 Type에 대해 정의된 생성자를 지정된 BindingFlags로 검색합니다.

예제

이 예제에서는 instance 생성자 2개와 정적 생성자 1개가 있는 클래스의 오버로드 출력 GetConstructors() 을 보여줍니다.

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

오버로드는 GetConstructorsInstancePublic 사용하므로 정적 생성자는 식에 for 의해 계산되거나 에서 계산되지 IsStatic않습니다.

정적 생성자를 찾으려면 오버로드를 GetConstructors 사용하고 다음 코드 예제와 같이 , , BindingFlags.Static, BindingFlags.NonPublicBindingFlags.InstanceBindingFlags.Public조합(논리적 OR)을 전달합니다.

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);
        }
    }
}
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에 대해 정의된 모든 public 생성자를 반환합니다.

public:
 cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public:
 virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public System.Reflection.ConstructorInfo[] GetConstructors ();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors ();
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()

반환

형식 이니셜라이저를 제외하고(정적 생성자) 현재 ConstructorInfo에 대해 정의된 모든 public 인스턴스 생성자를 나타내는 Type 개체의 배열입니다. public 인스턴스 생성자가 현재 Type에 대해 정의되어 있지 않거나 현재 Type이 제네릭 형식 또는 제네릭 메서드 정의의 형식 매개 변수를 나타내는 경우 ConstructorInfo 형식의 빈 배열이 반환됩니다.

구현

특성

설명

.NET 6 및 이전 버전에서 메서드는 GetConstructors 선언 순서와 같은 특정 순서로 생성자를 반환하지 않습니다. 해당 순서가 다르기 때문에 생성자가 반환되는 순서에 따라 코드가 달라지지 않아야 합니다. 그러나 .NET 7부터는 어셈블리의 메타데이터 순서에 따라 순서가 결정적입니다.

다음 표에서는 형식을 반영할 때 메서드에서 반환되는 기본 클래스의 Get 멤버를 보여 줍니다.

멤버 형식 정적 비정적
생성자 아니요
필드 아니요 예. 필드는 항상 이름별 및 서명으로 숨깁니다.
이벤트 해당 없음 일반적인 형식 시스템 규칙은 상속이 속성을 구현하는 메서드의 상속과 동일하다는 것입니다. 리플렉션은 속성을 hide-by-name-and-signature으로 처리합니다. 아래의 참고 2를 참조하세요.
메서드 아니요 예. 메서드(가상 및 가상이 아닌 메서드)는 이름별 숨기기 또는 이름별 숨기기 및 서명일 수 있습니다.
중첩 형식 아니요 아니요
속성 해당 없음 일반적인 형식 시스템 규칙은 상속이 속성을 구현하는 메서드의 상속과 동일하다는 것입니다. 리플렉션은 속성을 hide-by-name-and-signature으로 처리합니다. 아래의 참고 2를 참조하세요.
  1. 이름별 숨기기 및 서명은 사용자 지정 한정자, 반환 형식, 매개 변수 형식, sentinels 및 관리되지 않는 호출 규칙을 포함하여 서명의 모든 부분을 고려합니다. 이진 비교입니다.

  2. 리플렉션의 경우 속성 및 이벤트는 이름별 숨기기 및 서명입니다. 기본 클래스에 get 및 set 접근자가 둘 다 있는 속성이 있지만 파생 클래스에 get 접근자만 있는 경우 파생 클래스 속성은 기본 클래스 속성을 숨기며 기본 클래스의 setter에 액세스할 수 없습니다.

  3. 사용자 지정 특성은 공통 형식 시스템의 일부가 아닙니다.

이 메서드 오버로드는 (BindingFlags.PublicBindingFlags.InstanceOrVisual Basic의 GetConstructors(BindingFlags) 경우)를 사용하여 BindingFlags.Public | BindingFlags.Instance 메서드 오버로드를 호출합니다. 클래스 이니셜라이저(정적 생성자)를 찾을 수 없습니다. 클래스 이니셜라이저를 찾으려면 를 사용하는 BindingFlags오버로드를 사용하고 (BindingFlags.StaticOrBindingFlags.NonPublic Visual Basic에서는 )를 지정 BindingFlags.Static | BindingFlags.NonPublic 합니다. 속성을 사용하여 클래스 이니셜라이저를 TypeInitializer 가져올 수도 있습니다.

현재 Type 가 생성된 제네릭 형식을 나타내는 경우 이 메서드는 형식 매개 변수가 적절한 형식 인수로 대체된 개체를 반환 ConstructorInfo 합니다. 예를 들어 클래스 C<T> 에 생성자 C(T t1) (Sub New(ByVal t1 As T)Visual Basic의 경우)가 있는 경우 를 C<int> 호출 GetConstructors 하면 C#(Sub New(ByVal t1 As Integer)Visual Basic의 경우)을 나타내는 가 반환 ConstructorInfo 됩니다C(int t1).

현재 Type 가 제네릭 형식 매개 변수를 나타내는 경우 메서드는 GetConstructors 빈 배열을 반환합니다.

추가 정보

적용 대상

GetConstructors(BindingFlags)

파생 클래스에서 재정의되면, 현재 Type에 대해 정의된 생성자를 지정된 BindingFlags로 검색합니다.

public:
 abstract cli::array <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);
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 입니다. 생성자가 현재 ConstructorInfo에 대해 정의되어 있지 않거나, 정의된 생성자 중 바인딩 제약 조건과 일치하는 것이 없거나, 현재 Type이 제네릭 형식 또는 제네릭 메서드 정의의 형식 매개 변수를 나타내는 경우 Type 형식의 빈 배열을 반환합니다.

구현

특성

설명

bindingAttr 는 공용 생성자만 반환할지 아니면 public 및 non-public 생성자를 둘 다 반환할지 지정하는 데 사용할 수 있습니다.

다음 BindingFlags 필터 플래그를 사용하여 검색에 포함할 생성자를 정의할 수 있습니다.

  • 와 함께 BindingFlags.NonPublic 를 지정 BindingFlags.Static 하여 클래스 이니셜라이저(정적 생성자)를 검색합니다. 속성을 사용하여 클래스 이니셜라이저를 TypeInitializer 가져올 수도 있습니다.

  • 및 중 BindingFlags.PublicBindingFlags.NonPublic 하나 또는 둘 다와 함께 를 지정 BindingFlags.Instance 하여 instance 생성자를 검색합니다.

자세한 내용은 System.Reflection.BindingFlags를 참조하세요.

.NET 6 및 이전 버전에서 메서드는 GetConstructors 선언 순서와 같은 특정 순서로 생성자를 반환하지 않습니다. 해당 순서가 다르기 때문에 생성자가 반환되는 순서에 따라 코드가 달라지지 않아야 합니다. 그러나 .NET 7부터는 어셈블리의 메타데이터 순서에 따라 순서가 결정적입니다.

현재 Type 가 생성된 제네릭 형식을 나타내는 경우 이 메서드는 형식 매개 변수가 적절한 형식 인수로 대체된 개체를 반환 ConstructorInfo 합니다. 예를 들어 클래스 C<T> 에 생성자 C(T t1) (Sub New(ByVal t1 As T)Visual Basic의 경우)가 있는 경우 를 C<int> 호출 GetConstructors 하면 C#(Sub New(ByVal t1 As Integer)Visual Basic의 경우)을 나타내는 가 반환 ConstructorInfo 됩니다C(int t1).

현재 Type 가 제네릭 형식 매개 변수를 나타내는 경우 메서드는 GetConstructors 빈 배열을 반환합니다.

추가 정보

적용 대상