우리는 가끔 런타임시에 어떤 객체에 대해 필드,속성,이벤트를 알고자 할 때가 간혹 있을 것입니다.
이를 한번 가져오는 코딩을 해 볼까 합니다.
먼저 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 메소드를 잘 이용하시면 필요한 경우에 따라 원하는 결과를 얻을 수 있을겁니다.
감사합니다. posted by 심재운