다음을 통해 공유


리플렉션(C# 프로그래밍 가이드)

업데이트: 2007년 11월

리플렉션에서는 어셈블리, 모듈 및 형식을 설명하는 Type 형식의 개체를 제공합니다. 리플렉션을 사용하여 형식의 인스턴스를 동적으로 만들거나, 형식을 기존 개체에 바인딩하거나, 기존 개체에서 형식을 가져오고 해당 메서드를 호출하거나 해당 필드와 속성에 액세스할 수 있습니다. 코드에서 특성을 사용하는 경우 리플렉션을 통해 해당 특성에 액세스할 수 있습니다. 자세한 내용은 특성(C# 프로그래밍 가이드)을 참조하십시오.

다음은 변수의 형식을 가져오기 위해 Object 기본 클래스의 모든 형식에서 상속되는 정적 메서드 GetType을 사용하는 리플렉션의 간단한 예제입니다.

// Using GetType to obtain type information:
int i = 42;
System.Type type = i.GetType();
System.Console.WriteLine(type);

출력 결과는 다음과 같습니다.

System.Int32

이 예제에서는 로드된 어셈블리의 전체 이름을 가져오기 위해 Reflection을 사용합니다.

// Using Reflection to get information from an Assembly:
System.Reflection.Assembly o = System.Reflection.Assembly.Load("mscorlib.dll");
System.Console.WriteLine(o.GetName());

출력 결과는 다음과 같습니다.

mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

참고:

C# 키워드 protected 및 internal은 IL에서 의미가 없으며 리플렉션 API에서 사용되지 않습니다. IL에서 해당 용어는 패밀리 및 어셈블리입니다. 리플렉션을 사용하여 internal 메서드를 식별하려면 IsAssembly 속성을 사용하고, protected internal 메서드를 식별하려면 IsFamilyOrAssembly를 사용합니다.

리플렉션 개요

리플렉션은 다음과 같은 상황에서 유용합니다.

  • 프로그램의 메타데이터에 있는 특성에 액세스해야 하는 경우. 리플렉션을 사용하여 특성 액세스 항목을 참조하십시오.

  • 어셈블리에 있는 형식을 검사하고 인스턴스화해야 하는 경우

  • 런타임에 새 형식을 빌드해야 하는 경우. System.Reflection.Emit의 클래스를 사용합니다.

  • 런타임에 바인딩을 수행하고 런타임에 작성된 형식의 메서드에 액세스하려는 경우. 동적으로 형식 로드 및 사용 항목을 참조하십시오.

관련 단원

자세한 내용은 다음을 참조하십시오.

C# 언어 사양

자세한 내용은 C# 언어 사양에서 다음 단원을 참조하십시오.

  • 1.12 특성

  • 7.5.11 typeof 연산자

참고 항목

개념

C# 프로그래밍 가이드

참조

응용 프로그램 도메인(C# 프로그래밍 가이드)

어셈블리 및 전역 어셈블리 캐시(C# 프로그래밍 가이드)