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() 메서드로 동적으로 메서드를 호출할 수 있습니다.