C# :: Lecture & TIPs

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

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

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

 

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 키워드를 이용하여 쉽게 얻을 수 있게 됩니다.

 

Type myObjectType = typeof(MyObject);

 

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

 

Type myObjectType = typeof(MyObject);

System.Reflection.FieldInfo[] fieldInfo =
	myObjectType.GetFields();

foreach (System.Reflection.FieldInfo info in fieldInfo)
	Console.WriteLine(info.Name);

 

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

myStringField
myIntField
myObjectField

 

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

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

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

고맙습니다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s