재우니의 블로그



우리는 가끔 런타임시에 어떤 객체에 대해 필드,속성,이벤트를 알고자 할 때가 간혹 있을 것입니다.
이를 한번 가져오는 코딩을 해 볼까 합니다.


먼저 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 심재운