Reflection
리플렉션(Reflection)
- 런타임 시에 객체에 대한 정보를 질의 하는 방법.
- System.Reflection
- System.Type 클래스를 이용.
객체의 Type가져오기
- typeof 연산자
- System.Object의 GetType()
- Type.GetType()
using System;
using System.Reflection;
public class GetTypeTest {
public static void Main() {
//1. dll 파일로 접근하는 방법
Assembly a = Assembly.LoadFrom("C:\\WINNT\\Microsoft.NET\\Framework\\v1.0.3705\\System.dll");
//LoadFrom() 메서드 : 로드하고자 하는 파일의 경로와 파일의 확장자까지 입력해야 사용
//Assembly a = Assembly.Load("System");
//Load() 메서드 : 경로를 지정불가, 실행파일이 있는 현재의 디렉터리를 기준으로 dll을 로딩후 파일의 확장자를 제외한 파일의 이름만을 사용. 결과로 출력된 822라는 것은 System.dll 파일 안에 존재하는 Type 클래스의 개수.
Type [ ] type = a.GetTypes();
Console.WriteLine(type.Length); // 결과 : 822
/*
foreach(Type t in type){
Console.WriteLine(t.FullName);
}
*/
//2. 객체로 접근하는 방법
string s = "jabook";
Type t1 = s.GetType();
Console.WriteLine(t1); //결과 : System.String
//3. 런타임 시 지정된 이름으로 접근하는 방법
Type t2 = Type.GetType("System.String");
Console.WriteLine(t2); //결과 : System.String
//4. 클래스 타입으로 접근하는 방법
Type t3 = typeof(System.String);
Console.WriteLine(t3); //결과 : System.String
}
}
* Type을 이용하여 클래스의 정보 추출
using System;
using System.Reflection;
public class TypeInfoTest {
public int temp =1000;
public void PrintShow(){ }
public static void Main() {
try{
Type t = Type.GetType("TypeInfoTest");
Console.WriteLine("[기본클래스 타입]");
Console.WriteLine(t.BaseType);
// BaseType 속성은 Type 클래스의 읽기전용 속성, 현재 Type 클래스가 직접 상속하는 클래스 타입(이름)을 반환.
// 만약, Object 클래스의 Type 클래스라면 상속하는 클래스가 없으므로 null을 반환.
Console.WriteLine("[생성자 목록]");
ConstructorInfo[ ] ctor = t.GetConstructors();
for(int i=0;i<ctor.Length;i++)
Console.WriteLine(ctor[i]);
Console.WriteLine("[메서드 목록]");
MethodInfo[ ] m = t.GetMethods();
for(int i=0;i<m.Length;i++)
Console.WriteLine(m[i]);
Console.WriteLine("[변수 목록]");
FieldInfo[ ] f = t.GetFields();
for(int i=0;i<f.Length;i++)
Console.WriteLine(f[i]);
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
필드 정보 탐색
- GetField / GetFields
메소드 정보 탐색
- GetMethods
생성자 탐색
- GetConstructions
[출처] 파일 & 디렉토리.(2004.05.18) CSharp 기초 |작성자 여유
'Language > C#.NET' 카테고리의 다른 글
ASP.NET 서버 모델의 성능에 대한 고찰 (0) | 2012.04.24 |
---|---|
Machine Key (0) | 2012.04.24 |
Attribute (0) | 2012.04.24 |
C# 기초 (0) | 2012.04.24 |
날짜차이계산 (0) | 2012.04.24 |