본문 바로가기

C#

C# 리플렉션(reflection)

반응형
  • 객체의 클래스, 메서드, 필드, 속성 등을 액세스할 수 있음

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