C#반사 유틸리티 노트
7427 단어 C#
프로그램 집합는 모듈을 포함하고 모듈은 유형을 포함하며 유형은 구성원을 포함한다.반사는 봉인 프로그램 집합, 모듈, 유형의 대상을 제공한다.반사를 사용하여 유형의 실례를 동적으로 만들고 유형을 기존 대상에 귀속시키거나 기존 대상에서 유형을 가져올 수 있습니다.그런 다음 유형 방법을 호출하거나 필드와 속성에 액세스할 수 있습니다.일반적으로 반사에는 다음과 같은 용도가 있습니다.
System.Reflection.Emit 명명 공간의 클래스는 특수한 형식의 반사를 제공하여 실행할 때 유형을 구성할 수 있습니다.
또한 사용자가 유형을 선택하고 선택한 유형에 대한 정보를 볼 수 있도록 유형 브라우저라는 응용 프로그램을 만드는 데 반사를 사용할 수도 있습니다.
반사에는 또 다른 용도가 있다.JScript와 같은 언어 컴파일러는 반사를 사용하여 기호 테이블을 구성합니다.System.Runtime.Serialization 명명 공간의 클래스는 반사로 데이터에 접근하고 오래 저장할 필드를 확인합니다.System.Runtime.Remoting 명명 공간의 클래스는 서열화를 통해 간접적으로 반사를 사용한다.
—— MSDN 반사(C# ) 반사 개요
1. 동적 로드 프로그램 세트
우리는 프로그램 집합의 파일 이름을 통해 프로그램 집합을 불러올 수 있다.
Assembly libAssembly = Assembly.Load("Lib.Entity");
프로그램 집합을 얻은 후에, 우리는 이 프로그램 집합의 유형을 하나 또는 모두 얻을 수 있다.
2. 프로그램 집합의 형식 가져오기
클래스의 전체 이름(네임스페이스 포함)을 알면 다음과 같은 방법으로 클래스의 유형을 얻을 수 있습니다.
Type bookType = libAssembly.GetType("Lib.Entity.Book");
또는 이 프로그램 집합의 모든 유형을 얻을 수 있습니다.
Type[] allTypes = libAssembly.GetTypes();
3. 동적 생성 유형의 인스턴스
유형을 얻은 후에는 유형에 따라 유형의 인스턴스를 생성할 수 있습니다.
Lib.Entity.Book book = Activator.CreateInstance(bookType) as Lib.Entity.Book;
사실 우리가 하나의 유형을 알게 된 후에 동태적으로 하나의 실례를 만드는 것은 매우 불합리하다. 개인적으로 여기는 하나의 인터페이스나 하위 클래스를 실례화할 수 있고 IOC(반전 제어)에 비교적 유용하다고 생각한다.예를 들면 다음과 같습니다.
IBook bk = Activator.CreateInstance(bookType) as Lib.Entity.Book;
4. 유형 호출 방법
유형을 인스턴스화한 후 다음과 같은 방법으로 유형을 호출할 수 있습니다.
MethodInfo method = bookType.GetMethod("GetBookString", BindingFlags.Instance | BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic);
output(method.Invoke(book, null).ToString());
GetMethod 방법을 통해 뒤에 있는 귀속 표지와 결합하면 공공 방법뿐만 아니라 개인과 보호받는 방법, 정적 방법도 얻을 수 있고 그것들을 호출할 수 있다.
5. 액세스 필드 및 속성
다음과 같은 유형의 GetProperty 방법을 사용하여 속성 정보를 얻을 수 있습니다.
PropertyInfo info = bookType.GetProperty("Title");
이 속성에 값을 지정할 수도 있습니다.
info.SetValue(book, value, null);
필드의 접근이 비슷합니다.
이러한 액세스 필드 및 속성 기술은 ORM에서 자주 사용됩니다.
6. Attribute 액세스
이 Attribute는 유형, 메서드 또는 필드에 대한 손질입니다.만약 존재한다면, 우리는 실행할 때 얻을 수 있습니다.
bookType.GetCustomAttributes(false);
이 기술은 이전과 서로 결합하여 ORM 프레임워크를 실현하는 데 자주 사용된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.