다른 클래스의 메서드를 동적으로 실행하는 예제.
우선 네임스페이스 어셈블리를 로드하고, 실행하려는 메서드를 가진 클래스의 인스턴스를 생성한뒤, InvokeMember 함수를 사용한다. 파라미터도 넘길수 있고, 리턴값도 받을 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [Class1.cs] using System; public class Class1 {
public static String method1()
{
return "This is static method in class1" ;
}
public String method2()
{
return "This is Instance method in class1" ;
}
public String method3( String s )
{
return "Hello " + s;
} } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | [DynaInvoke.cs] using System; using System.Reflection; class DynamicInvoke {
public static void Main(String[] args )
{
Assembly MyAssembly = Assembly.Load( "FirstProject" );
Type MyType = MyAssembly.GetType( "FirstProject.Class1" );
object MyObj = Activator.CreateInstance(MyType);
//Invoking a static method (How to invoke a static method??)
String str = (String)MyType.InvokeMember( "method1" , BindingFlags.Default | BindingFlags.InvokeMethod, null , null , new object [] { });
Console.WriteLine(str);
//Invoking a non-static method (How to invoke a non static method??)
str = (String)MyType.InvokeMember( "method2" , BindingFlags.Default | BindingFlags.InvokeMethod, null , MyObj, new object [] { });
Console.WriteLine(str);
//Invoking a non-static method with parameters (How to invoke a non static method with parametres??)
object [] MyParameter = new object [] { "Sadi" };
str = (String)MyType.InvokeMember( "method3" , BindingFlags.Default | BindingFlags.InvokeMethod, null , MyObj, MyParameter);
Console.WriteLine(str);
} } |
'개발 관련 글' 카테고리의 다른 글
[C#]보다 빠르게 썸네일이미지 만드는 방법 (0) | 2012.01.31 |
---|---|
C# 날짜관련 달력관련 (0) | 2011.08.18 |
MS Chart Control (0) | 2011.08.09 |
[C#] 글 읽어주는 메모장 만들기 (0) | 2011.08.02 |
[C#] 닷넷에서의 전역후킹 / 이벤트 날리기 (0) | 2011.08.02 |