반응형
- 객체의 클래스, 메서드, 필드, 속성 등을 액세스할 수 있음
typeof를 사용하여 클래스에 대한 Type 객체 가져오기
class ReflectionTest
{
public ReflectionTest()
{
Type t = typeof(ReflectionTestMember);
foreach (var member in t.GetMembers())
{
Console.WriteLine($"{member}");
}
}
}
class ReflectionTestMember
{
public int i = 0;
public int I { get => i; set => i = value; }
public void Run() { }
}
ReflectionTest reflectionTest = new ReflectionTest();

Type 객체로 멤버 호출하기
class ReflectionTest
{
public ReflectionTest()
{
ReflectionTestMember reflectionTestMember = new ReflectionTestMember();
Type t = reflectionTestMember.GetType();
var field = t.GetField("i");
Console.WriteLine($"필드: {field.GetValue(reflectionTestMember)}");
var property = t.GetProperty("I");
Console.WriteLine($"속성: {property.GetValue(reflectionTestMember)}");
var method = t.GetMethod("Run");
Console.WriteLine($"메서드: {method.Invoke(reflectionTestMember, new object[] {"h", "i"} )}");
public void Run() => Console.WriteLine("gg");
}
}
class ReflectionTestMember
{
public int i = 77;
public int I { get => i; set => i = value; }
public string Run(string str1, string str2) => str1 + str2;
}
ReflectionTest reflectionTest = new ReflectionTest();

Type과 Activator 클래스로 객체 동적 생성
Type t = Type.GetType("Syntax.ReflectionTest");
dynamic r = Activator.CreateInstance(t);
r.Run();

반응형
'C#' 카테고리의 다른 글
C# 파일 입출력(File, Directory, Path) (0) | 2022.01.02 |
---|---|
C# 튜플(Tuple) (0) | 2022.01.02 |
C# asyn, await (0) | 2021.12.27 |
C# 확장 메서드 (0) | 2021.12.27 |
C# 이벤트(Event) (0) | 2021.12.26 |