본문 바로가기

Development

[C#] 객체 정보를 얻기 위해 Reflection 을 사용해 보자

런타임시에 어떤 객체에 대해 필드, 속성, 이벤트를 알아내고자 할 때가 간혹 있으리라 생각되는데요, 이번 시간에는 이를 한번 가져오는 코딩을 해 볼까 합니다.

먼저 MyObject 클래스에 필드, 속성, 이벤트를 기재했습니다.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public class MyObject

{

//public 필드

public string myStringField;

public int myIntField;

public MyObject myObjectField;

 

//public 속성

public string MyStringProperty { get; set; }

public int MyIntProperty { get; set; }

public MyObject MyObjectProperty { get; set; }

 

//public 이벤트

public event EventHandler MyEvent1;

public event EventHandler MyEvent2;

}

 

닷넷 클래스에서 우리가 Type 클래스로 접근을 할 수 있기에, Type 객체를 얻기 위해서 typeof 키워드를 이용하여 쉽게 얻을 수 있게 됩니다.

 

1

Type myObjectType = typeof(MyObject);

 

public 접근자를 가지고 있는 필드의 이름을 가지고 오기 위해서 Type.GetFields 메소드를 이용하시면 되는데요.

 

1

2

3

4

5

6

7

Type myObjectType = typeof(MyObject);

 

System.Reflection.FieldInfo[] fieldInfo =

myObjectType.GetFields();

 

foreach (System.Reflection.FieldInfo info in fieldInfo)

Console.WriteLine(info.Name);

Advertisement

 

 

Report this ad

 

출력하게 되면, 다음과 같은 결과를 확인하실 수 있습니다.

myStringField
myIntField
myObjectField

 

이와 같이 System.Reflection 의 FieldInfo 클래스를 이용해서 위의 예시 뿐만 아니라 많은 속성 값을 가지고 원하는 값을 추출해 올 수 있습니다.

이에 대한 예제는 msdn 을 참고하셔서 FieldInfo 클래스의 SetValue 와 GetValue 메소드를 잘 이용하시면 필요한 경우에 따라 원하는 결과를 얻을 수 있을 겁니다.

http://msdn.microsoft.com/en-us/library/system.reflection.fieldinfo.aspx

고맙습니다.