본문 바로가기
유니티 공부/C# 문법

C# 문법 - Reflection, Attribute

by 코딩하는 돼징 2023. 4. 20.
반응형

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을 수강하고 정리한 글입니다.

https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part1/dashboard

반응형

'유니티 공부 > 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

댓글