C# 리플렉션으로 Struct(구조체 / ValueType) 수정(Set) 하기
StackOverflow에 매우 좋은 답변으로 달려 있는 내용인데, C#에서 Reflection을 이용해서 구조체(Struct)의 맴버 변수를 Set(Get)하려고 하면 제대로 작동되지 않는다.
접근할 수 없는 이유는 Struct는 ValueType으로 Stack에 할당되어 있기에 Reflection 연산으로 접근 할 수 없기 때문이다.
이를 의도된 Boxing을 통해서 Heap영역으로 옮긴 후 Reflection을 사용하는 방법이다.
물론 이때 다시 맴버 변수 접근으로 값을 가져오려면 Unboxing을 해야한다.
생각보다 퍼포먼스 손해가 많아 보이니, 꼭 필요한 경우나 어쩔수 없는 최후의(?) 상황에서 사용을 하자
이해를 돕기 위한 예시 코드는 아래와 같다
* 코드가 제대로 안나오면 F5(새로고침)해보세요
* 의사코드이므로 컴파일 안될 수 있습니다.
* Ref.https://stackoverflow.com/questions/6608368/why-doesnt-reflection-set-a-property-in-a-struct
'나만의 강의' 카테고리의 다른 글
C# 클래스 할당시 메모리 구성 디버깅 (1) | 2017.06.24 |
---|---|
게임 프로그래밍 공부 방법(입문) - 프로그래밍 공부, 대체 어떻게 해야 돼? (2) | 2014.05.09 |
[ToolFramewrok] 게임엔진과 툴을 연결하는 구조 1 (0) | 2014.03.26 |
[KGC2012 - 자료공개] WPF와 XBAP으로 만드는 개발툴 (0) | 2013.01.01 |
[자료공개] Boost Function ( 2008년 7월 4일 ) (0) | 2012.02.19 |
나만의 강의
2017. 6. 19. 15:42