반응형

리플렉션


.NET 환경에서 리플렉션은 런타임에 형식에 대한 정보를 얻는 과정이다. 리플렉션 서비스를 이용하면, 런타임에 어셈블리를 로드할 수 있고, ildasm 메타데이터 창에서 볼 수 있었던 것과 같은 종류의 정보를 찾아낼 수 있다. 

리플렉션을 이용해 해당 어셈블리에 포함되어 있는 모든 형식들의 목록과 각 형식에 정의된 메소드,필드,속성 그리고 이벤트 등을 얻어낼 수 있다. 또한 해당 클래스가 지원하는 인터페이스나,메소드의 매개변수뿐만 아니라 기타 관련 내용들(기본클래스의 상세내용, 네임 스페이스 정보, 매니페스트 데이터 등)도 동적으로 찾아낼 수 있다.

반응형

'Programing > C#&.Net' 카테고리의 다른 글

Delegate(대리자) 프로그램  (0) 2016.11.30
리플렉션 활용  (0) 2016.11.30
어셈블리,메타데이터  (0) 2016.11.30
형식 메타데이터  (0) 2016.11.30
c# 프로그램 연습  (0) 2016.11.30
반응형

정의하는 어셈블리 문서화



어셈블리의 메타 데이터는 내부 형식들 뿐만 아니라 이 형식들에 의해서 참조되는 외부 형식들도 설명한다. 

System.Object형식에 대한 대한 TypeRef 블록을 볼 수 있다.





ildasm 메타데이터 창을 이용하면 Assembly 토큰을 이용해서 어셈블리 자신을 설명하는데 .NET 메타데이터를 볼 수도 있다. 다음의 목록에서 볼 수 있듯이 Assembly 테이블에 기록된 정보는 MAINIFEST 아이콘을 통해 볼수 있는 정보와 동일하다.





.NET 메타데이터는 TypeDef와 TypeRef블록과 Assembly 토큰 이외에도, AssemblyRef#n 토큰을 이용해서 각외부 어셈블리를 문서화 한다. MyFirstAssembly.dll 을 통해 사용하고 있는 것에 대한 AssemblyRef를 볼 수 있다.




.NET 메타데이테의 코드 베이스에 있는 모든 문자열 리터럴이 User Strings 토큰 아래에 문서화 된다. 




.NET 메타데이터가 매우 설명적이고 해당 코드 베이스에 있는 모든 내부에 정의된 형식을 나열하고 있다는 것이다. 

이 정보를 어떻게 활용할 수 있을지와 애ㅗ 신경써야하는 부분을 고려하기 위해선 .NET 리플렉션 서비스에 대해 알아보야 한다.


반응형

'Programing > C#&.Net' 카테고리의 다른 글

리플렉션 활용  (0) 2016.11.30
리플렉션(reflection)  (0) 2016.11.30
형식 메타데이터  (0) 2016.11.30
c# 프로그램 연습  (0) 2016.11.30
Delegate(대리자)  (0) 2016.11.30
반응형

메타데이터

메타데이터를 이용해서 형식을 완전하게 설명할 수 있다는 것이 .NET 런타임의 핵심 요소이다. 직렬화(serialization),원격(remotion),XML 웹 서비스와 같은 .NET기술은 모두 런타임에 형식들의 포멧을 알아낼 수 있기 때문에 가능한 것이다. 또한 교차 언어 상호운용성,컴파일러 지원, IDE의 인텔리센스 기능도 모두 형식에 대한 구체적인 설명이 있기 때문에 가능한 것이다. .NET형식은 클래스,인터페이스,구조체,열거형,델리게이트 중 하나이다. .NET 메타데이터는 이 형식들의 내부 구성을 설명하는데 이용되는 매개체이다. 


메타데이터는 그 중요성에도 불구하고 .NET Framework에만 있는 새로운 개념은 아니다. 예를 들어,COM에서 IDL은 해당 COM  서버 안에 있는 내부 COM 형식을 설명하는 데 이용된다. COM과 같이 .NET코드 라이브러리도 형식 메타데이터를 지원한다. .NET형식 메타데이터는 COM IDL과 동일한 문법을 갖지는 않는다. 형식 메타데이터는 내부적으로 더 도표화된(인덱스가 있는)포멧 문서화 된다. 


ildasm.exe 에 Ctrl+M 을 누루면 형식 메타데이터를 확인할 수 있다.



반응형

'Programing > C#&.Net' 카테고리의 다른 글

리플렉션(reflection)  (0) 2016.11.30
어셈블리,메타데이터  (0) 2016.11.30
c# 프로그램 연습  (0) 2016.11.30
Delegate(대리자)  (0) 2016.11.30
dll만들기 명령 프롬프트 사용  (0) 2016.11.30

+ Recent posts