본문 바로가기

C#

.NET Reflection을 이용한 메서드 호출

728x90

.NET Refrection은 .NET 객체의 클래스 타입, 메서드, 프로퍼티 등의 메타 정보를 런타임에 알아내는 기능을 제공한다. 또한, 이러한 메타 정보를 얻은 후, 직접 메서드를 호출하거나 프로퍼티를 변경하는 등의 작업도 가능하다.

.NET Reflection을 이용한 메서드 호출
- .NET Reflection을 이용해서 메서드 프로토타입 즉, 함수 인자, 리턴값 등의 메타 정보를 읽어 오는 것이 가능하며, 이를 통해 직접 그 메서드를 호출하는 것이 가능하다. 특정 메서드 정보를 얻기 위해서 Type.GetMethod()를 호출하고, 모든 메서드 정보를 가져오기 위해서는 GetMethods()를 호출한다.

class Program
{
	static void Main(string[] args)
    {
    	var m1 = new MyClass1();
        var m2 = new MyClass2();
        
        MyFunc(m1);
        MyFunc(m2);
    }
    
    static void MyFunc(object myObject)
    {
        // 해당 객체가 MyMethod라는 메서드를 가지고 있는지
        MethodInfo mi = myObject.GetType().GetMethod("MyMethod");
        if (mi != null)
        {
            // 만약 메서드가 있으면, 호출
            mi.Invoke(myObject, null);
        }
        else
        {
            Console.WriteLine(myObject.GetType().Name +
             ": MyMethod not found");
        }
    }
}

// 아래는 테스트 클래스들
class MyClass1
{
    public void MyMethod()
    {
        Console.WriteLine("MyClass1.MyMethod");
    }
}

class MyClass2
{
    public void DifferentMethod()
    {
        Console.WriteLine("MyClass3.DifferentMethod");
    }
}

 

출력 결과

MyClass1.MyMethod
MyClass2: MyMethod not found

 

[출처]
http://www.csharpstudy.com/Practical/Prac-reflection.aspx

728x90

'C#' 카테고리의 다른 글

Invoke와 BeginInvoke의 차이점  (0) 2022.12.12
Action/Func/Predicate  (0) 2022.12.12
그라데이션이 포함된 이미지를 배경으로 한 Form 만들기  (1) 2022.12.02
메시지 처리 방법 3가지  (0) 2022.12.02
Debounce, Throttle  (0) 2022.12.02