내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Type.GetType 메서드 (String)

2013-12-13

대/소문자 구분 검색하여 지정된 이름의 Type을 가져옵니다.

Namespace:  System
어셈블리:  mscorlib(mscorlib.dll)

public static Type GetType(
	string typeName
)

매개 변수

typeName
형식: System.String
가져올 형식에 대한 어셈블리로 한정된 이름입니다. AssemblyQualifiedName을 참조하세요. 형식이 현재 실행 중인 어셈블리나 Mscorlib.dll에 있는 경우 네임스페이스로 한정된 형식 이름만 제공하면 됩니다.

반환 값

형식: System.Type
지정된 이름의 Type이 있으면 해당 개체이고, 그렇지 않으면 null입니다.

예외조건
ArgumentNullException

typeNamenull인 경우

TargetInvocationException

클래스 이니셜라이저가 호출되고 예외가 발생되는 경우

ArgumentException

typeName이 해당 형식 인수 중 하나로 포인터 형식, ByRef 형식 또는 Void를 사용하는 제네릭 형식을 나타내는 경우

-또는-

typeName이 형식 인수 개수가 잘못된 제네릭 형식을 나타내는 경우

-또는-

typeName이 제네릭 형식을 나타내고, 형식 인수 중 하나가 해당하는 형식 매개 변수의 제약 조건을 충족하지 않는 경우

FileNotFoundException

어셈블리 또는 해당 종속성 중 하나가 없는 경우

FileLoadException

어셈블리 또는 해당 종속성 중 하나가 있지만 로드할 수 없는 경우

BadImageFormatException

어셈블리 또는 해당 종속성 중 하나가 유효하지 않는 경우

-또는-

어셈블리가 .NET Framework의 이후 버전으로 컴파일된 경우

네임스페이스로 한정된 이름을 아는 경우 GetType 메서드를 사용하여 다른 어셈블리의 형식에 대한 Type 개체를 가져올 수 있습니다. GetType을 사용하면 typeName에 지정된 어셈블리가 로드됩니다. Load 메서드를 사용하여 어셈블리를 로드한 다음 Assembly 클래스의 GetType 또는 GetTypes 메서드를 사용하여 Type 개체를 가져올 수도 있습니다. 컴파일 시 프로그램에 알려진 어셈블리에 형식이 있는 경우 C#의 typeof, Visual Basic의 GetType 또는 C++의 typeid를 사용하는 것이 더 효율적입니다.

다음 표에서는 Get 메서드를 형식에 리플렉션할 때 해당 메서드에서 반환되는 기본 클래스의 멤버를 보여 줍니다.

멤버 형식

정적

비정적

생성자

아니요

아니요

필드

아니요

예 필드는 항상 이름 및 서명으로 숨겨집니다.

이벤트

사용할 수 없음

공용 형식 시스템 규칙은 상속이 속성을 구현한 메서드의 상속과 같다는 것입니다. 리플렉션은 속성을 이름 및 서명으로 숨겨진 상태로 취급합니다. 다음의 참고 2를 참조하세요.

메서드

아니요

예 가상 및 가상이 아닌 메서드는 모두 이름으로 숨겨지거나 이름 및 서명으로 숨겨질 수 있습니다.

중첩 형식

아니요

아니요

속성

사용할 수 없음

공용 형식 시스템 규칙은 상속이 속성을 구현한 메서드의 상속과 같다는 것입니다. 리플렉션은 속성을 이름 및 서명으로 숨겨진 상태로 취급합니다. 다음의 참고 2를 참조하세요.

참고:

  1. 이름 및 서명으로 숨기면 사용자 지정 한정자, 반환 형식, 매개 변수 형식, 센티널, 관리되지 않는 호출 규칙 등을 포함한 서명의 모든 부분을 인식합니다. 이것은 이진 비교입니다.

  2. 리플렉션을 위해 속성과 이벤트는 이름 및 서명으로 숨겨집니다. 속성의 기본 클래스에 get 및 set 접근자가 모두 있지만 파생 클래스에는 get 접근자만 있는 경우, 파생 클래스 속성에서는 기본 클래스 속성이 숨겨지므로 기본 클래스의 설정자에 액세스할 수 없습니다.

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

배열 또는 COM 형식은 사용 가능한 클래스 테이블로 미리 로드된 경우에만 검색됩니다.

typeName은 네임스페이스로 한정된 형식 이름 또는 어셈블리 이름 사양을 포함하는 어셈블리로 한정된 이름이 될 수 있습니다. AssemblyQualifiedName을 참조하세요.

typeName에 네임스페이스만 있고 어셈블리 이름이 없는 경우 이 메서드는 호출 개체의 어셈블리와 Mscorlib.dll만 해당 순서대로 검색합니다. typeName이 어셈블리 이름 일부나 전체를 사용하여 정규화되었으면 이 메서드는 지정된 어셈블리에서 검색합니다. 어셈블리에 강력한 이름이 있는 경우 전체 어셈블리 이름이 필요합니다.

AssemblyQualifiedName 속성은 중첩 형식, 어셈블리 이름 및 제네릭 형식 인수를 포함하여 정규화된 형식 이름을 반환합니다. 공용 언어 런타임을 지원하는 모든 컴파일러에서는 중첩 클래스의 단순한 이름을 내보내고, 리플렉션에서는 쿼리 시 다음 규칙에 따라 변환된 이름을 생성합니다.

구분 기호

의미

백슬래시(\)

이스케이프 문자입니다.

역따옴표(`)

제네릭 형식의 이름 끝에 있는 형식 매개 변수 개수를 나타내는 하나 이상의 숫자 앞에 붙습니다.

대괄호([])

생성된 제네릭 형식의 경우 제네릭 형식 인수 목록을 묶고 형식 인수 목록에서는 어셈블리로 한정된 형식을 묶습니다.

쉼표(,)

어셈블리 이름 앞에 붙습니다.

마침표(.)

네임스페이스 식별자를 나타냅니다.

더하기 기호(+)

중첩 클래스 앞에 붙습니다.

예를 들면, 다음과 같은 이름이 클래스의 정규화된 이름이 될 수 있습니다.

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

네임스페이스가 TopNamespace.Sub+Namespace인 경우, 문자열 뒤의 더하기 기호(+)에 이스케이프 문자(\)를 함께 사용해야만 해당 기호가 중첩 구분 기호로 해석되지 않습니다. 리플렉션에서는 이 문자열을 다음과 같이 내보냅니다.

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

"++"는 "\+\+"가 되고 "\"는 "\\"가 됩니다.

이 정규화된 이름은 그대로 유지되었다가 나중에 Type을 로드하는 데 사용될 수 있습니다. Type을 검색 및 로드하려면 형식 이름만 포함되거나 어셈블리 한정 형식 이름이 있는 GetType을 사용합니다. 형식 이름만 있는 GetType에서는 호출자의 어셈블리와 System 어셈블리의 Type을 찾고, 어셈블리 한정 형식 이름이 있는 GetType에서는 모든 어셈블리의 Type을 찾습니다.

형식 이름에는 해당 형식에 대한 추가 정보(참조 형식인지 포인터 형식인지 또는 배열 형식인지 등)를 나타내는 후행 문자가 포함될 수 있습니다. 이러한 후행 문자를 사용하지 않고 형식 이름을 검색하려면 t.GetElementType().ToString()을 사용합니다. 여기서 t는 형식입니다.

어셈블리 이름을 제외한 모든 형식 이름 구성 요소 에서 공백은 의미가 있습니다. 어셈블리 이름에서 ',' 구분 기호 앞의 공백은 의미가 있으나 ',' 구분 기호 뒤의 공백은 무시됩니다.

제네릭 형식 이름은 역따옴표(`)로 끝나고 뒤에 제네릭 형식 인수 개수를 나타내는 숫자가 옵니다. 이러한 이름 변환을 사용하면 컴파일러에서 이름은 같지만 형식 매개 변수 개수가 다른 동일한 카테고리 내의 제네릭 형식을 지원할 수 있습니다. 예를 들어, 리플렉션은 Visual Basic의 제네릭 메서드 Tuple(Of T)Tuple(Of T0, T1)이나 Visual C#의 Tuple<T>Tuple<T0, T1> 에서 변환된 이름 Tuple`1Tuple`2을 반환합니다.

제네릭 형식의 경우 형식 인수 목록은 대괄호로 묶이고 형식 인수는 쉼표로 구분됩니다. 예를 들어, 제네릭 Dictionary<TKey, TValue>에는 형식 매개 변수가 두 개 있습니다. String 형식의 키가 있는 MyTypeDictionary<TKey, TValue>는 다음과 같이 표현될 수 있습니다.

System.Collections.Generic.Dictionary`2[System.String,MyType]

형식 인수 목록에서 어셈블리 한정 형식을 지정하려면 어셈블리 한정 형식을 대괄호로 묶습니다. 이렇게 하지 않으면 어셈블리로 한정된 이름을 구성하는 요소를 구분하는 쉼표가 추가 형식 인수를 구분하는 것으로 해석됩니다. 예를 들어 String 형식의 키가 있는 MyAssembly.dll의 MyType에 대한 Dictionary<TKey, TValue>는 다음과 같이 지정할 수 있습니다.

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
참고참고:

어셈블리 한정 형식은 형식 매개 변수 목록에 나타나는 경우에만 대괄호로 묶을 수 있습니다. 형식 매개 변수 목록의 정규화된 형식과 정규화되지 않은 형식을 어셈블리에서 검색하는 규칙은 제네릭이 아닌 정규화된 형식과 제네릭이 아닌 정규화되지 않은 형식에 대한 규칙과 같습니다.

Nullable 형식은 제네릭 형식의 특별한 경우입니다. 예를 들어, nullable Int32는 문자열 "System.Nullable`1[System.Int32]"로 표현됩니다.

참고참고:

C#, C++ 및 Visual Basic에서는 형식 연산자를 사용하여 nullable 형식을 가져올 수도 있습니다. 예를 들어, nullable Boolean 형식은 C#의 typeof(Nullable<bool>), C++의 Nullable<Boolean>::typeid 및 Visual Basic의 GetType(Nullable(Of Boolean))에 의해 반환됩니다.

다음 표에서는 각각의 형식에 대해 사용해야 하는 GetType 구문을 보여 줍니다.

가져올 내용

사용할 도구

nullable Int32

Type.GetType("System.Nullable`1[System.Int32]")

MyType에 대한 관리되지 않는 포인터

Type.GetType("MyType*")

MyType에 대한 포인터에 대한 관리되지 않는 포인터

Type.GetType("MyType**")

MyType에 대한 관리되는 포인터 또는 참조

Type.GetType("MyType&"). 포인터와 달리 참조는 수준이 하나로 제한됩니다.

부모 클래스 및 중첩 클래스

Type.GetType("MyParentClass+MyNestedClass")

하한이 0인 1차원 배열

Type.GetType("MyType[]")

하한을 알 수 없는 1차원 배열

Type.GetType("MyType[*]")

n차원 배열

대괄호 안에 총 n-1개의 쉼표(,)가 있습니다. 예를 들어, System.Object[,,]는 3차원 Object 배열을 나타냅니다.

1차원 배열의 배열입니다.

Type.GetType("MyType[][]")

하한을 알 수 없는 사각형의 2차원 배열

Type.GetType("MyType[,]")

형식 인수가 하나 있는 제네릭 형식입니다.

Type.GetType("MyGenericType`1[MyType]")

형식 인수가 두 개 있는 제네릭 형식입니다.

Type.GetType("MyGenericType`2[MyType,AnotherType]")

어셈블리로 한정된 형식 인수가 두 개 있는 제네릭 형식입니다.

Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")

어셈블리로 한정된 형식 인수가 있는 어셈블리로 한정된 제네릭 형식입니다.

Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")

형식 인수가 두 개 있는 제네릭 형식인 형식 인수를 가진 제네릭 형식입니다.

Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

버전 메모

Windows Phone

 GetType은 잘못된 매개 변수 값을 전달하는 경우 항상 ArgumentException 예외를 발생시키지 않습니다. 예기치 않은 예외를 잡아내는 형식 Exception 예외를 처리합니다.

다음 예제에서는 System.Int32의 형식을 검색하고 이 형식 개체를 사용해서 System.Int32FullName 속성을 표시합니다.

참고참고:

이 예제를 실행하려면 Windows Phone용 정적 TextBlock 컨트롤이 있는 예제 빌드를 참조하세요.


using System;
class Example
{
    public static void Demo(System.Windows.Controls.TextBlock outputBlock)
    {
        try
        {
            // Get the type of a specified class.
            Type myType1 = Type.GetType("System.Int32");
            outputBlock.Text += String.Format("The full name is {0}.", myType1.FullName) + "\n";
            // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
            Type myType2 = Type.GetType("NoneSuch", true);
            outputBlock.Text += String.Format("The full name is {0}.", myType2.FullName) + "\n";
        }
        catch (TypeLoadException e)
        {
            outputBlock.Text += e.Message + "\n";
        }
        catch (Exception e)
        {
            outputBlock.Text += e.Message + "\n";
        }
    }
}

/* This example produces output similar to the following:

The full name is System.Int32.
Could not load type 'NoneSuch' from assembly 'SilverlightApplication, Version=0.0.0.0, Culture = neutral, PublicKeyToken=null'.
 */


Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2015 Microsoft