46.10 Type 클래스로 클래스의 멤버 호출하기
이번에는 Type 클래스로 특정 클래스의 멤버를 호출하는 방법을 알아보겠습니다. 다음 내용을 입력한 후 실행해 보세요.
Type 클래스로 클래스의 멤버 호출: ReflectionGetMethod.cs
using System; using System.Reflection; namespace ReflectionGetMethod { public class MemberClass { public string Name { get; set; } = "길벗출판사"; public string GetName() { return Name + ", " + DateTime.Now.ToShortTimeString(); } } class ReflectionGetMethod { static void Main() { //① 리플렉션 기능으로 특정 클래스의 멤버를 동적으로 호출 MemberClass m = new MemberClass(); Type t = m.GetType(); //ⓐ 속성 읽어 오기 및 속성 호출 PropertyInfo pi = t.GetProperty("Name"); //Name 속성 Console.WriteLine("속성 호출 : {0}", pi.GetValue(m)); //ⓑ 메서드 읽어 오기 및 메서드 호출 MethodInfo mi = t.GetMethod("GetName"); //GetName 메서드 Console.WriteLine("메서드 호출 : {0}", mi.Invoke(m, null)); //② 참고: C# 4.0 이상에서는 dynamic 개체로 쉽게 멤버를 동적으로 호출 dynamic d = new MemberClass(); //dynamic 키워드로 동적 개체 생성 Console.WriteLine("속성 호출 : {0}", d.Name); //속성 호출 Console.WriteLine("메서드 호출 : {0}", d.GetName()); //메서드 호출 } } }
실행 결과
속성 호출 : 길벗출판사 메서드 호출 : 길벗출판사, 오전 1:29 속성 호출 : 길벗출판사 메서드 호출 : 길벗출판사, 오전 1:29
ⓐ처럼 GetProperty() 메서드로 특정 속성 정보를 얻은 후 GetValue() 메서드로 속성 값을 동적으로 호출할 수 있습니다.
ⓑ처럼 GetMethod() 메서드로 특성 메서드 정보를 얻은 후 Invoke() 메서드로 동적으로 메서드를 호출할 수 있습니다.