C #에서 속성을 동적으로 추가 할 수 있습니까? 추가하거나 런타임에

런타임에 속성을 추가하거나 런타임에 속성 값을 변경할 수 있습니까?



답변

속성은 정적 메타 데이터입니다. 어셈블리, 모듈, 형식, 멤버, 매개 변수 및 반환 값은 C #에서 일류 개체가 아닙니다 (예 : System.Type클래스는 단순히 형식의 반영된 표현입니다). 유형에 대한 속성의 인스턴스를 가져 와서 쓰기 가능하지만 속성이 유형에 적용될 때 속성에 영향을 미치지 않는 경우 속성을 변경할 수 있습니다.


답변

이것은 실제로 정확히 달성하려는 것에 달려 있습니다.

System.ComponentModel.TypeDescriptor의 물건은 종류, 특성 및 개체 인스턴스에 속성을 추가하는 데 사용, 그리고 당신이 아니라 그 속성을 검색하는 데 사용해야하는 제한이 될 수있다. 이러한 속성을 사용하는 코드를 작성하고 이러한 제한 내에서 살 수 있다면 분명히 제안 할 것입니다.

내가 아는 한 PropertyGrid 컨트롤과 Visual Studio 디자인 화면은 TypeDescriptor를 소비하는 유일한 BCL입니다. 사실, 그들이 실제로해야 할 일의 절반 정도를하는 방식입니다.


답변

당신은 할 수 없습니다. 한 가지 해결 방법은 런타임에 파생 클래스를 생성하고 속성을 추가하는 것일 수 있지만 약간의 과잉 일 수 있습니다.


답변

글쎄, 그냥 다르기 위해 Reflection.Emit을 사용하여 참조하는 기사를 찾았습니다.

링크는 다음과 같습니다. http://www.codeproject.com/KB/cs/dotnetattributes.aspx , 가능한 접근 방식이 논의되어 있기 때문에 기사 하단의 주석 중 일부를 살펴볼 수도 있습니다.


답변

아뇨.

속성은 메타 데이터이며 컴파일 된 어셈블리에서 이진 형식으로 저장됩니다 (따라서 단순한 유형 만 사용할 수있는 이유도 있음).


답변

나는 그렇게 믿지 않습니다. 내가 틀리더라도 희망하는 가장 좋은 것은 Type 의 인스턴스 가 아닌 전체 Type에 추가하는 것 입니다.


답변

동적으로 추가 할 수있는 것이 필요한 경우 c # 속성이 적합하지 않습니다. XML로 데이터를 저장하십시오. 최근에 속성으로 시작한 프로젝트를 수행했지만 결국에는 xml로 직렬화로 이동했습니다.