반응형
1. Reflection
class의 모든 필드의 정보를 가져오는 X-ray와 같은 기능을 가지고 있다.
C#에서 모든 객체들은 오브젝트 객체에서 파생되어 나온 것이다.
Pig클래스에서 없는 함수가 pig 객체에서 나오는 것을 확인 할 수 있다. 이는 오브젝트 클래스에서 선언된 함수들이다.
01 GetType
객체의 데이터타입을 반환
public Type GetType ();
Type type = pig.GetType();
02 GetFields(BindingFlags)
현재 Type에 대해 정의된 필드를 지정된 binging 조건으로 검색
public abstract System.Reflection.FieldInfo[] GetFields (System.Reflection.BindingFlags bindingAttr);
반환
FieldInfo[]
현재 FiledInfo에 대해 정의된 필드 중 binging조건과 일치하는 모든 필드를 나타내는 Type 개체의 배열을 반환한다.
var fields = type.GetFields(System.Reflection.BindingFlags.Public
| System.Reflection.BindingFlags.NonPublic
| System.Reflection.BindingFlags.Static
| System.Reflection.BindingFlags.Instance);
03 FieldInfo
FieldInfo을 사용하기 위해 System.Reflection을 추가해줘야 한다.
using System.Reflection;
foreach(FieldInfo field in fields)
{
// 정보를 하나씩 얻어 오기
string access = "protected";
if (field.IsPublic)
access = "public";
else if (field.IsPrivate)
access = "private";
Console.WriteLine($"{access} {field.FieldType.Name} {field.Name}");
}
2. attribute
컴퓨터가 런타임에서 클래스나 메소드의 메타데이터(attribute에서 제공하는 정보)를 기록
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)]
public abstract class Attribute
class Important : System.Attribute
{
string message;
public Important(string message) { this.message = message; }
}
[Important("very Important")]
public static Attribute[] GetCustomAttributes (System.Reflection.MemberInfo element);
foreach(FieldInfo field in fields)
{
var attribute = field.GetCustomAttributes();
}
3. Unity에서 중요한 Reflection
c# 파일을 런타임에서 열심히 분석하다가 갖고 있는 field를 체크해서 field이름이 Move_Speed이니까 Move_Speed를 왼쪽에 작성해주고 어떤 타입인지 체크해서 숫자를 오른쪽에 작성해준다.
public Move_Speed= 8
본 게시글은 MMORPG Part1을 수강하고 정리한 글입니다.
반응형
'유니티 공부 > C# 문법' 카테고리의 다른 글
C# 문법 - enum(열거형) (0) | 2023.05.09 |
---|---|
C# 문법 - Nullable type (0) | 2023.04.20 |
C# 문법 - exception (0) | 2023.04.19 |
C# 문법 - Lambda, Func, Action (0) | 2023.04.19 |
C# 문법 - Event (0) | 2023.04.18 |
댓글