다음을 통해 공유


System.Type 클래스

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

클래스는 Type 기능의 System.Reflection 루트이며 메타데이터에 액세스하는 기본 방법입니다. 멤버를 Type 사용하여 형식 선언, 형식의 멤버(예: 클래스의 생성자, 메서드, 필드, 속성 및 이벤트)와 클래스가 배포되는 모듈 및 어셈블리에 대한 정보를 가져옵니다.

코드가 리플렉션을 사용하여 액세스 수준에 관계없이 형식 및 해당 멤버에 대한 정보를 가져오는 데 필요한 권한은 없습니다. 코드가 리플렉션을 사용하여 공용 멤버에 액세스하거나 액세스 수준이 일반 컴파일 중에 표시되도록 하는 다른 멤버에 대한 사용 권한이 필요하지 않습니다. 그러나 코드가 리플렉션을 사용하여 일반적으로 액세스할 수 없는 멤버(예: 프라이빗 또는 내부 메서드 또는 클래스가 상속하지 않는 형식의 보호된 필드)에 액세스하려면 코드에 있어야 ReflectionPermission합니다. 리플렉션에 대한 보안 고려 사항을 참조하세요.

Type 는 여러 구현을 허용하는 추상 기본 클래스입니다. 시스템은 항상 파생 클래스 RuntimeType를 제공합니다. 리플렉션에서 런타임이라는 단어로 시작하는 모든 클래스는 시스템의 개체당 한 번만 만들어지고 비교 작업을 지원합니다.

참고 항목

다중 스레딩 시나리오에서는 데이터에 대한 액세스를 동기화하기 위해 개체를 static 잠그 Type 지 마세요. 제어할 수 없는 다른 코드도 클래스 형식을 잠글 수 있습니다. 이로 인해 교착 상태가 발생할 수 있습니다. 대신 프라이빗 static 개체를 잠가 정적 데이터에 대한 액세스를 동기화합니다.

참고 항목

파생 클래스는 호출 코드의 기본 클래스의 보호된 멤버에 액세스할 수 있습니다. 또한 호출 코드 어셈블리의 어셈블리 멤버에 대한 액세스가 허용됩니다. 일반적으로 초기 바인딩된 코드에서 액세스가 허용되는 경우 런타임에 바인딩된 코드에서도 액세스할 수 있습니다.

참고 항목

다른 인터페이스를 확장하는 인터페이스는 확장된 인터페이스에 정의된 메서드를 상속하지 않습니다.

Type 개체는 어떤 형식을 나타내나요?

이 클래스는 스레드로부터 안전합니다. 여러 스레드는 이 형식의 인스턴스에서 동시에 읽을 수 있습니다. 클래스의 인스턴스는 Type 다음 형식을 나타낼 수 있습니다.

  • 클래스
  • 값 형식
  • 배열
  • 인터페이스
  • 열거형
  • 대리자
  • 생성된 제네릭 형식 및 제네릭 형식 정의
  • 생성된 제네릭 형식, 제네릭 형식 정의 및 제네릭 메서드 정의의 형식 인수 및 형식 매개 변수

Type 개체 검색

특정 형식과 연결된 개체는 Type 다음과 같은 방법으로 가져올 수 있습니다.

  • 인스턴스 메서드는 인스턴스 Object.GetType 의 형식을 나타내는 개체를 반환 Type 합니다. 모든 관리되는 형식이 Object파생되므로 모든 형식의 GetType 인스턴스에서 메서드를 호출할 수 있습니다.

    다음 예제에서는 메서드를 Object.GetType 호출하여 개체 배열에 있는 각 개체의 런타임 형식을 확인합니다.

    object[] values = { "word", true, 120, 136.34, 'a' };
    foreach (var value in values)
        Console.WriteLine("{0} - type {1}", value,
                          value.GetType().Name);
    
    // The example displays the following output:
    //       word - type String
    //       True - type Boolean
    //       120 - type Int32
    //       136.34 - type Double
    //       a - type Char
    
    let values: obj[] = [| "word"; true; 120; 136.34; 'a' |]
    for value in values do
       printfn $"{value} - type {value.GetType().Name}"
    
    // The example displays the following output:
    //       word - type String
    //       True - type Boolean
    //       120 - type Int32
    //       136.34 - type Double
    //       a - type Char
    
    Module Example1
       Public Sub Main()
          Dim values() As Object = { "word", True, 120, 136.34, "a"c }
          For Each value In values
             Console.WriteLine("{0} - type {1}", value, 
                               value.GetType().Name)
          Next
       End Sub
    End Module
    ' The example displays the following output:
    '       word - type String
    '       True - type Boolean
    '       120 - type Int32
    '       136.34 - type Double
    '       a - type Char
    
  • 정적 Type.GetType 메서드는 정규화된 이름으로 지정된 형식을 나타내는 개체를 반환 Type 합니다.

  • , Module.GetTypeModule.FindTypes 메서드는 Module.GetTypes모듈에 정의된 형식을 나타내는 개체를 반환 Type 합니다. 첫 번째 메서드는 모듈에 정의된 모든 public 및 private 형식에 대한 개체 배열 Type 을 가져오는 데 사용할 수 있습니다. (또는 메서드를 통해 Assembly.GetModule 또는 Assembly.GetModules 속성을 통해 인스턴스 ModuleType.Module 가져올 수 있습니다.)

  • 개체 System.Reflection.Assembly 에는 어셈블리에 정의된 클래스(예 Assembly.GetType: , 및 )를 검색하는 여러 메서드가 Assembly.GetTypes포함되어 있습니다 Assembly.GetExportedTypes.

  • 메서드는 FindInterfaces 형식에서 지원하는 인터페이스 형식의 필터링된 목록을 반환합니다.

  • 메서드는 GetElementType 요소를 나타내는 개체를 반환 Type 합니다.

  • GetInterface 메서드는 GetInterfaces 형식에서 지원하는 인터페이스 형식을 나타내는 개체를 반환 Type 합니다.

  • 메서드는 GetTypeArray 임의의 개체 집합으로 지정된 형식을 나타내는 개체 배열을 반환 Type 합니다. 개체는 형식 Object의 배열로 지정됩니다.

  • GetTypeFromProgID COM 상호 운용성을 위해 메서드와 GetTypeFromCLSID 메서드가 제공됩니다. 또는 에 Type 지정된 형식을 나타내는 개체를 ProgIDCLSID반환합니다.

  • 상호 GetTypeFromHandle 운용성을 위해 메서드가 제공됩니다. 클래스 핸들에 Type 지정된 형식을 나타내는 개체를 반환합니다.

  • C# typeof 연산자, C++ typeid 연산자 및 Visual Basic GetType 연산자는 형식에 Type 대한 개체를 가져옵니다.

  • 이 메서드는 MakeGenericType 생성된 제네릭 형식을 나타내는 개체를 반환 Type 합니다. 이 형식은 속성이 반환true될 경우 ContainsGenericParameters 열린 생성 형식이고, 그렇지 않으면 닫힌 생성된 형식입니다. 제네릭 형식은 닫힌 경우에만 인스턴스화할 수 있습니다.

  • , MakePointerType및 메서드는 MakeArrayType각각 지정된 형식의 배열, 지정된 형식에 대한 포인터 및 참조 매개 변수의 형식(refC#, F#의 'byref', ByRef Visual Basic)을 나타내는 개체를 반환 TypeMakeByRefType 합니다.

형식 개체와 같음 비교

Type 형식을 나타내는 개체는 고유합니다. 즉, 동일한 형식을 나타내는 경우에만 두 Type 개의 개체 참조가 동일한 개체를 참조합니다. 이렇게 하면 참조 같음을 사용하여 개체를 Type 비교할 수 있습니다. 다음 예제에서는 여러 정수 값을 나타내는 개체를 비교하여 Type 동일한 형식인지 여부를 확인합니다.

long number1 = 1635429;
int number2 = 16203;
double number3 = 1639.41;
long number4 = 193685412;

// Get the type of number1.
Type t = number1.GetType();

// Compare types of all objects with number1.
Console.WriteLine("Type of number1 and number2 are equal: {0}",
                  Object.ReferenceEquals(t, number2.GetType()));
Console.WriteLine("Type of number1 and number3 are equal: {0}",
                  Object.ReferenceEquals(t, number3.GetType()));
Console.WriteLine("Type of number1 and number4 are equal: {0}",
                  Object.ReferenceEquals(t, number4.GetType()));

// The example displays the following output:
//       Type of number1 and number2 are equal: False
//       Type of number1 and number3 are equal: False
//       Type of number1 and number4 are equal: True
let number1 = 1635429L
let number2 = 16203
let number3 = 1639.41
let number4 = 193685412L

// Get the type of number1.
let t = number1.GetType()

// Compare types of all objects with number1.
printfn $"Type of number1 and number2 are equal: {Object.ReferenceEquals(t, number2.GetType())}"
printfn $"Type of number1 and number3 are equal: {Object.ReferenceEquals(t, number3.GetType())}"
printfn $"Type of number1 and number4 are equal: {Object.ReferenceEquals(t, number4.GetType())}"

// The example displays the following output:
//       Type of number1 and number2 are equal: False
//       Type of number1 and number3 are equal: False
//       Type of number1 and number4 are equal: True
Module Example
   Public Sub Main()
      Dim number1 As Long = 1635429
      Dim number2 As Integer = 16203
      Dim number3 As Double = 1639.41
      Dim number4 As Long = 193685412
      
      ' Get the type of number1.
      Dim t As Type = number1.GetType()
      
      ' Compare types of all objects with number1.
      Console.WriteLine("Type of number1 and number2 are equal: {0}",
                        Object.ReferenceEquals(t, number2.GetType()))
      Console.WriteLine("Type of number1 and number3 are equal: {0}",
                        Object.ReferenceEquals(t, number3.GetType()))
      Console.WriteLine("Type of number1 and number4 are equal: {0}",
                        Object.ReferenceEquals(t, number4.GetType()))
   End Sub
End Module
' The example displays the following output:
'       Type of number1 and number2 are equal: False
'       Type of number1 and number3 are equal: False
'       Type of number1 and number4 are equal: True