Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 현재 타입의 특정 필드 가져오기 – GetField 메서드 완벽 정리

C#에서 특정 타입이 가진 필드 정보를 조회하려면 System.Reflection 네임스페이스의 FieldInfo 클래스와 Type.GetField() 메서드를 활용하면 됩니다. 이 메서드에 필드 이름을 문자열로 전달하면 해당 필드의 정보가 담긴 FieldInfo 객체가 반환됩니다.

예제 1: 존재하는 필드 조회하기

다음은 Subject 클래스의 SubName 필드를 조회하는 기본적인 예제입니다.

using System;
using System.Reflection;
public class Demo {
   public static void Main() {
   Type type = typeof(Subject);
      try {
         FieldInfo fieldInfo = type.GetField("SubName");
         Console.WriteLine("FieldInfo = {0}", fieldInfo);
      }
      catch (ArgumentNullException e) {
         Console.Write("{0}", e.GetType(), e.Message);
      }
   }
}
public class Subject {
   public string SubName = "Science";
}

실행 결과

FieldInfo = System.String SubName

위 예제에서는 typeof(Subject)로 타입 객체를 얻은 뒤, GetField("SubName")을 호출하여 필드 정보를 가져왔습니다. 출력 결과에서 확인할 수 있듯이 반환된 FieldInfo 객체에는 필드의 데이터 타입(System.String)과 이름(SubName)이 함께 표시됩니다.

예제 2: null 값을 전달한 경우

그렇다면 GetField() 메서드에 null을 전달하면 어떻게 될까요? 다음 예제를 통해 살펴보겠습니다.

using System;
using System.Reflection;
public class Demo {
   public static void Main() {
      Type type = typeof(Subject);
      try {
         FieldInfo fieldInfo = type.GetField(null);
         Console.WriteLine("FieldInfo = {0}", fieldInfo);
      }
      catch (ArgumentNullException e) {
         Console.Write("{0}", e.GetType(), e.Message);
      }
   }
}
public class Subject {
   public string SubName = "Science";
}

실행 결과

System.ArgumentNullException

필드 이름 자리에 null을 전달하면 ArgumentNullException 예외가 발생합니다. 따라서 실무 코드에서는 try-catch 블록으로 이런 상황을 처리하거나, 메서드를 호출하기 전에 인자 값이 유효한지 먼저 검사하는 습관을 들이는 것이 안전합니다.

정리

  • Type.GetField(string name)은 지정한 이름의 public 필드 정보를 FieldInfo 객체로 반환합니다.
  • 해당 이름의 필드가 존재하지 않으면 null을 반환하며, 인자로 null을 전달하면 ArgumentNullException이 발생합니다.
  • private 필드까지 조회하려면 BindingFlags.NonPublic | BindingFlags.Instance 같은 바인딩 플래그를 함께 사용해야 합니다.