Notice
Recent Posts
Recent Comments
Link
bdfgdfg
Reflection / Attribute 본문
반응형
Reflection
C#에서는 내가 정의한 클래스를 통해 만든 객체에 접근해보면.
내가 만들지 않은 다른 여러 기능들이 존재한다.
이것은 C#에서 만드는 모든 객체들은 모두 위 그림처럼 object클래스에서 파생되서 나온 것이기 때문.
여기서 주의깊게 봐야할 것은 GetType.
이녀석은 Type이란 자료를 가져온다.
이것으로 할 수 있는게 매우 많은데 클래스의 이름이라던지 해당 클래스내의 멤버라던지등 모든 정보를 가져올 수 있다.
이런식으로 클래스안의 내부 멤버에 접근할 수 있다.
참고로 Flag란 이름에서 알 수 있듯이. 여러 옵션을 찾기위해 |(or연산)을 해준다.
System.Reflection.FieldInfo[] field = type.GetFields(System.Reflection.BindingFlags.Public
| System.Reflection.BindingFlags.NonPublic
| System.Reflection.BindingFlags.Static
| System.Reflection.BindingFlags.Instance
);
(참고로 GetFields가 반환하는것은 System.Reflection.FieldInfo[].)
이렇게 가져온 field를 통해 배열을 모두 순회하면서 데이터를 하나씩 뽑아오고 그 정보를 런타임에 확인가능하다.
이렇게 멤버정보를 얻는것 뿐만아니라 정말 많은 정보를 얻어올 수 있다.
Attribute
Attribute 런타임에 참고할 수 있는 정보를 얻을 수 있다.(ex 주석)
이러한 정보도. Type을 통해 얻어올 수 있다.
이렇게. 우리가 설정한 Attributes값을 얻어올 수 있다.
확인해보면
실제로 유니티에서 클래스내 필드 멤버중 public으로 열려있는 스크립트는 인스펙터창에서 실시간(런타임)으로 수정이 가능한것도 이 Reflection 기능 덕분이라고 한다.
반응형
'게임프로그래밍 > C#' 카테고리의 다른 글
[C#] 부모 자식 사이의 형 변환 (is,as) (0) | 2022.04.18 |
---|---|
[C#] ref,out 키워드 (0) | 2022.04.18 |
[C#] 문자열 다루기 (0) | 2022.04.18 |
[C#] C#의 데이터 형식 (0) | 2022.04.17 |
[C#] CLR(Common Language Runtime) (0) | 2022.04.17 |
Comments