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.GetType및 Module.FindTypes 메서드는 Module.GetTypes모듈에 정의된 형식을 나타내는 개체를 반환
Type
합니다. 첫 번째 메서드는 모듈에 정의된 모든 public 및 private 형식에 대한 개체 배열 Type 을 가져오는 데 사용할 수 있습니다. (또는 메서드를 통해 Assembly.GetModule 또는 Assembly.GetModules 속성을 통해 인스턴스Module
를 Type.Module 가져올 수 있습니다.)개체 System.Reflection.Assembly 에는 어셈블리에 정의된 클래스(예 Assembly.GetType: , 및 )를 검색하는 여러 메서드가 Assembly.GetTypes포함되어 있습니다 Assembly.GetExportedTypes.
메서드는 FindInterfaces 형식에서 지원하는 인터페이스 형식의 필터링된 목록을 반환합니다.
메서드는 GetElementType 요소를 나타내는 개체를 반환
Type
합니다.및 GetInterface 메서드는 GetInterfaces 형식에서 지원하는 인터페이스 형식을 나타내는 개체를 반환 Type 합니다.
메서드는 GetTypeArray 임의의 개체 집합으로 지정된 형식을 나타내는 개체 배열을 반환 Type 합니다. 개체는 형식 Object의 배열로 지정됩니다.
GetTypeFromProgID COM 상호 운용성을 위해 메서드와 GetTypeFromCLSID 메서드가 제공됩니다. 또는 에 Type 지정된 형식을 나타내는 개체를
ProgID
CLSID
반환합니다.상호 GetTypeFromHandle 운용성을 위해 메서드가 제공됩니다. 클래스 핸들에
Type
지정된 형식을 나타내는 개체를 반환합니다.C#
typeof
연산자, C++typeid
연산자 및 Visual BasicGetType
연산자는 형식에Type
대한 개체를 가져옵니다.이 메서드는 MakeGenericType 생성된 제네릭 형식을 나타내는 개체를 반환 Type 합니다. 이 형식은 속성이 반환
true
될 경우 ContainsGenericParameters 열린 생성 형식이고, 그렇지 않으면 닫힌 생성된 형식입니다. 제네릭 형식은 닫힌 경우에만 인스턴스화할 수 있습니다., MakePointerType및 메서드는 MakeArrayType각각 지정된 형식의 배열, 지정된 형식에 대한 포인터 및 참조 매개 변수의 형식(
ref
C#, 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
.NET