런타임시에 어떤 객체에 대해 필드, 속성, 이벤트를 알아내고자 할 때가 간혹 있으리라 생각되는데요, 이번 시간에는 이를 한번 가져오는 코딩을 해 볼까 합니다.
먼저 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
고맙습니다.
'Development' 카테고리의 다른 글
DLL이란? (Dynamic Link Library) (0) | 2020.12.05 |
---|---|
Reflection (Visual Basic) (0) | 2020.12.04 |
Go 언어로 메모리 조작과 API 후킹을 구현하기 (윈도우즈 앱 리버스 엔지니어링) (0) | 2020.12.04 |
How to prevent memory editing to prevent hooking (0) | 2020.12.04 |
API Hooking (0) | 2020.12.04 |