c# 리플렉션 예제

By Dave Sanasack, on Aug, 02 2019

다음의 모든 예제는 Test.dll 어셈블리에서 샘플 클래스 계산기에 액세스하려고 합니다. 계산기 클래스는 다음과 같이 정의 할 수 있습니다. 따라서 응용 프로그램의 특성을 사용하여 비즈니스 개체를 장식하는 경우 리플렉션을 활용하여 형식을 반영하고 형식 메서드의 특성을 검색한 다음 그에 따라 몇 가지 작업을 수행할 수 있습니다. 리플렉션은 런타임시 어셈블리, 모듈 및 형식 정보를 찾기 위해 관리되는 코드가 자체 메타데이터를 읽을 수 있는 기능입니다. 즉, 리플렉션은 어셈블리, 모듈 및 형식을 캡슐화하는 개체를 제공합니다. 프로그램은 어셈블리에서 메타데이터를 추출하고 해당 메타데이터를 사용하여 사용자에게 알리거나 자체 동작을 수정하여 자체적으로 반영합니다. 리플렉션은 C++ RTTI(런타임 형식 정보)와 유사하지만 범위와 기능이 훨씬 광범위합니다. C#에서 리플렉션을 사용하면 개체, 메서드의 세부 정보를 찾고 개체를 만들고 런타임에 메서드를 호출할 수 있습니다. System.Reflection 네임스페이스에는 로드된 형식, 메서드 및 필드에 대한 관리되는 보기를 제공하는 클래스와 인터페이스가 포함되어 있으며, 형식을 동적으로 만들고 호출할 수 있습니다.

리플렉션을 사용하는 C# 코드를 작성할 때 코더는 typeof 연산자를 사용하여 개체의 형식을 얻거나 GetType() 메서드를 사용하여 현재 인스턴스의 형식을 가져올 수 있습니다. 다음은 리플렉션 사용을 보여 주는 샘플 코드입니다. 다음 코드 조각에서는 리플렉션을 사용하여 클래스 이름과 Customer 클래스의 네임스페이스 이름을 가져오는 방법을 보여 주며, 다음 예제에서는 리플렉션을 사용하여 로드된 어셈블리의 전체 이름을 가져옵니다. 이제 리플렉션을 실행하기 위한 몇 가지 코드를 살펴보겠습니다. 고객이라는 다음 클래스를 고려하십시오. 이 예제에서는 어셈블리를 동적으로 로드하는 방법, 개체 인스턴스를 만드는 방법, 메서드를 호출하는 방법 또는 속성 값을 얻고 설정하는 방법을 보여 주며 있습니다. 리플렉터를 사용하여 생성자의 메타데이터와 형식의 공용 메서드를 표시하는 방법은 다음과 같습니다. 앞에서 만든 Customer 클래스를 다시 방문하여 기본 생성자와 매개 변수로 전달된 고객 개체의 유효성을 검사하는 데 사용되는 유효성 검사라는 메서드라는 두 가지 메서드를 통합해 보겠습니다. 이는 고객 클래스의 수정된 버전의 모습입니다. 다음 예제는 시스템 어셈블리에서 DateTime 클래스의 인스턴스를 만듭니다. 이전 장에서는 리플렉션을 사용하여 특성 정보를 볼 수 있다고 언급했습니다. C#에서 리플렉션은 런타임시 형식의 메타데이터를 가져오는 프로세스입니다.

System.Reflection 네임스페이스에는 리플렉션을 사용하여 Test.dll 어셈블리를 로드하고 계산기 클래스의 인스턴스를 만들고 해당 멤버(공용/개인, 인스턴스/정적)에 액세스하는 예제와 같은 리플렉션에 필요한 클래스가 포함되어 있습니다.