C#
리플렉션(Reflection)
코다람쥐
2022. 1. 26. 16:12
1. Reflection
리플렉션은 클래스의 정보들을 런타임(프로그램 실행) 중에 뜯어보고 분석할 수 있다.
using System;
using System.Collections.Generic;
using System.Reflection;
namespace CSharp
{
class Monster
{
public int hp;
protected int attack;
private float speed;
void Attack() { }
}
class Program
{
static void Main(string[] args)
{
Monster monster = new Monster();
Type type = monster.GetType(); // GetType은 Object클래스의 멤버
// public, Nonpublicm static, instance의 정보를 본다는 뜻
var fields = type.GetFields(System.Reflection.BindingFlags.Public
| System.Reflection.BindingFlags.NonPublic
| System.Reflection.BindingFlags.Static
| System.Reflection.BindingFlags.Instance
);
// using System.Reflection 추가
foreach (FieldInfo field in fields)
{
string access = "protected";
if (field.IsPublic)
access = "public";
else if (field.IsPrivate)
access = "private";
// Monster클래스의 멤버들의 정보를 출력
Console.WriteLine($"{access} {field.FieldType.Name} {field.Name}");
}
}
}
}
리플렉션의 사용방법은 복잡하니 그냥 이런식으로 쓰는구나 생각하고 넘기면된다.
중요한 것은 콘솔창에서 Monster클래스의 멤버들의 정보가 추출되었다는 점이다.
참고로 C#에서 Single은 float형을 나타낸다.