반응형
테스트에 사용할 라이브러리 소스 코드(클래스 라이브러리로 제작)
using System;
namespace DemoLib
{
public class Demo
{
int num;
public int Num
{
get
{
return num;
}
}
public int Add(int a,int b)
{
Console.WriteLine("Add 메서드 호출 됨:{0},{1}", a, b);
return a + b;
}
public Demo(int n)
{
Console.WriteLine("Demo 생성자 호출됨:{0}", n);
num = n;
}
public static void Foo(string msg)
{
Console.WriteLine("Foo 메서드 호출됨:{0}", msg);
}
}
}
명시적으로 어셈블리 로드하여 사용 예제(콘솔 응용으로 제작)
/* https://ehpub.co.kr
* Reflection
* 명시적 어셈블리 로딩
*/
using System;
using System.Reflection;
namespace 닷넷_리플렉션___명시적_어셈블리_로딩하여_사용하기
{
class Program
{
static void Main(string[] args)
{
try
{
Assembly asm = Assembly.Load("DemoLib");
//Type[] types = asm.GetTypes();
//foreach(Type type in types)
//{
// Console.WriteLine(type);
//}
Type type = asm.GetType("DemoLib.Demo");
object[] objs = new object[] { 5 };
object demo_ins = Activator.CreateInstance(type,objs);
PropertyInfo pi = type.GetProperty("Num");
int num = (int)pi.GetValue(demo_ins);
Console.WriteLine("번호:{0}", num);
MethodInfo mi = type.GetMethod("Add");
objs = new object[] { 3, 7 };
int re = (int)mi.Invoke(demo_ins, objs);
Console.WriteLine("반환:{0}", re);
mi = type.GetMethod("Foo");
objs = new object[] { "헬로우" };
mi.Invoke(null, objs);
Console.WriteLine("테스트 종료");
}
catch(Exception ex)
{
Console.WriteLine("예외 발생");
}
}
}
}
반응형
'C# > 실습으로 다지는 C#' 카테고리의 다른 글
[C# 소스] 21. 콘솔 응용의 기본 제어 – 메뉴로 상호 작용 (0) | 2020.04.14 |
---|---|
[C# 소소] 콘솔 글자 색 바꾸기 - Windows API 사용 (0) | 2020.04.13 |
19. 택배 요금 계산 시뮬레이션 C# (0) | 2020.04.12 |
[018] C# 실현 관계(Realization) 실습 (0) | 2020.04.10 |
[016] 의존(Dependency) 관계 실습 (0) | 2020.04.09 |