네임스페이스의 System.Reflection 클래스와 함께 System.Type로드된 어셈블리 및 클래스,인터페이스 및 값 형식(즉, 구조 체 및 열거형)과 같이 그 안에 정의된 형식에 대한 정보를 얻을 수 있습니다. 리플렉션을 사용하여 런타임에 형식 인스턴스를 만들고 호출하고 액세스할 수도 있습니다.
어셈블리 에는 모듈이 포함되고, 모듈에는 형식이 포함되고, 형식에는 멤버가 포함됩니다. 리플렉션은 어셈블리, 모듈 및 형식을 캡슐화하는 개체를 제공합니다. 리플렉션을 사용하여 형식의 인스턴스를 동적으로 만들거나, 형식을 기존 개체에 바인딩하거나, 기존 개체에서 형식을 가져올 수 있습니다. 그런 다음 형식의 메서드를 호출하거나 해당 필드 및 속성에 액세스할 수 있습니다. 리플렉션의 일반적인 용도는 다음과 같습니다.
- 어셈블리를 정의 및 로드하고, 어셈블리 매니페스트에 나열된 모듈을 로드하고, 이 어셈블리에서 형식을 찾아 인스턴스를 만드는 데 사용합니다 Assembly .
- 모듈 및 모듈의 클래스를 포함하는 어셈블리와 같은 정보를 검색하는 데 사용합니다 Module . 모듈에 정의된 모든 전역 메서드 또는 기타 특정 비 전역 메서드를 가져올 수도 있습니다.
- 생성자의 이름, 매개 변수, 액세스 한정자(예: ConstructorInfo 또는) 및 구현 세부 정보(예:
public
또는private
)와 같은 정보를 검색하는 데 사용합니다abstract
virtual
. GetConstructors 메서드 또는 GetConstructor 메서드를 사용하여 Type의 특정 생성자를 호출합니다. - 메서드의 이름, 반환 형식, 매개 변수, 액세스 한정자 및 구현 세부 정보(예: 또는MethodInfo)와 같은
abstract
정보를 검색하는 데 사용합니다virtual
. 특정 메서드를 호출하려면 GetMethods, GetMethod 또는 Type의 메서드를 사용하십시오. - 필드의 이름, 액세스 한정자 및 구현 세부 정보(예: FieldInfo)와 같은 정보를 검색하고 필드 값을 얻거나 설정하는 데 사용합니다
static
. - 이름, 이벤트 처리기 데이터 형식, 사용자 지정 특성, 선언 형식 및 반영된 이벤트 형식과 같은 정보를 검색하고 이벤트 처리기를 추가하거나 제거하는 데 사용합니다 EventInfo .
- 이름, 데이터 형식, 선언 형식, 반영된 형식, 속성의 읽기 전용 또는 쓰기 가능 상태와 같은 정보를 검색하고 속성 값을 얻거나 설정하는 데 사용합니다 PropertyInfo .
- 매개 변수의 이름, 데이터 형식, 매개 변수가 입력 또는 출력 매개 변수인지 여부, 메서드 서명에서 매개 변수의 위치와 같은 정보를 검색하는 데 사용합니다 ParameterInfo .
- 사용자 지정 특성에 대한 정보를 검색할 때 CustomAttributeData를 사용하고 MetadataLoadContext 또는 리플렉션 전용 컨텍스트(.NET Framework)에서 작업합니다. CustomAttributeData 를 사용하면 인스턴스를 만들지 않고 특성을 검사할 수 있습니다.
네임스페이 System.Reflection.Emit 스의 클래스는 런타임에 형식을 빌드할 수 있는 특수한 형태의 리플렉션을 제공합니다.
리플렉션을 사용하여 형식 브라우저를 만들면 사용자가 형식을 선택한 다음 해당 형식에 대한 정보를 볼 수 있습니다.
리플렉션에는 다른 용도가 있습니다. JScript와 같은 언어용 컴파일러는 리플렉션을 사용하여 기호 테이블을 생성합니다. 네임스페이 System.Runtime.Serialization 스의 클래스는 리플렉션을 사용하여 데이터에 액세스하고 유지할 필드를 결정합니다. System.Runtime.Remoting 네임스페이스의 클래스는 serialization을 통해 간접적으로 리플렉션을 활용합니다.
리플렉션의 런타임 형식
리플렉션은 형식, 멤버, 매개 변수 및 기타 코드 엔터티를 나타내는 클래스(예 Type : 및 MethodInfo)를 제공합니다. 그러나 리플렉션을 사용하는 경우 이러한 클래스에서 직접 작동하지 않으며, 대부분은 추상(MustInherit
Visual Basic)입니다. 대신 CLR(공용 언어 런타임)에서 제공하는 형식으로 작업합니다.
예를 들어, C# typeof
연산자(Visual Basic에서는 GetType
)를 사용하여 Type 개체를 가져오는 경우, 그 개체는 실제로 RuntimeType
입니다.
RuntimeType
는 Type 모든 추상 메서드의 구현을 파생시키고 제공합니다.
이러한 런타임 클래스는 internal
입니다 (Friend
는 Visual Basic에서). 기본 클래스 설명서에서 동작을 설명하므로 기본 클래스와 별도로 문서화되지 않습니다.
참고 문헌
.NET