더북(TheBook)

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

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.