2009-11-06 3 views
6

유형이 불변임을 지정하는 기본 제공 속성을 찾고 있는데, 발견 된 것은 System.ComponentModel.ImmutableObjectAttribute입니다.ImmutableObjectAttribute는 어떻게 사용됩니까?

리플렉터를 사용하여 어디에서 사용했는지 확인하고 사용하는 유일한 공용 클래스는 System.Drawing.Image ... WTF입니까? 문자열, int 또는 기본 유형 중 하나에서 사용될 수 있지만 Image는 이 아니고이 아니기 때문에 내부 상태를 변경할 수있는 방법이 많이 있습니다 (예 : Graphics 또는 Bitmap.SetPixel 메소드 사용).

따라서 불변으로 명시 적으로 선언 된 BCL의 유일한 클래스 인 입니다. 또는 나는 무엇인가 놓치고 있냐? 이 개체의 속성은 개체 자체가 불변이라고 하지 폼 디자이너 또는 유사한 디자인 타임 UI에서 편집 할 수없는 것을 의미합니다 -

답변

8

문서의 상태 : 확장 개체를 읽기 전용으로 을 렌더링할지 여부를

이 속성은 일반적으로 를 결정하기 위해 속성 창에서 사용됩니다. 따라서이 속성 은 디자인 타임에만 사용됩니다.

반사판이 특성을 사용하는 유일한 방법은 의장 성 격자에서 사용되는 내부 System.Windows.Forms.PropertyGridInternal.GridEntry.Flags 속성 게터 것을 보여준다.

3

나는 당신이 혼란 ImmutableObjectAttribute의 사용을 생각합니다.

이 속성은 그러나, 아마도 매일 WTF의 후보입니다 ... ImmutableObjectAttribute에 대한 문서에서

+1

"객체 자체가 변경 가능하지 않음"- 문서에서이 속성이 "편집 할 수있는 하위 속성이 없음을 지정합니다"라고 지정합니다. 당신이 말하는 것은 문서와 모순되는 것 같습니다. 설명해 주시겠습니까? – MasterMastic

+0

@Ken,이 속성은 객체가 Visual Studio의 폼 디자이너에서와 같은 * 속성 편집기 *를 사용할 때 * 편집 할 하위 속성이 없음을 의미합니다. 이러한 속성은이 속성과 관계없이 코드에서 설정하거나 수정할 수 있습니다. 현재 문서에 따르면 강조 속성은 다음과 같습니다. "이 특성은 확장 가능한 개체를 읽기 전용으로 렌더링할지 여부를 결정하기 위해 속성 창 *에서 일반적으로 사용됩니다 * 이와 같이이 속성은 디자인 타임에만 사용됩니다 *. " –

2

봐는 "이 속성은 일반적으로 사용되는 ... 개체가 편집 될 수있는 어떤 하위 속성이 없다고 지정 속성 창에서 확장 가능한 개체를 읽기 전용으로 렌더링할지 여부를 결정합니다. 따라서이 속성은 디자인 타임에만 사용됩니다. " 따라서이 속성은 PropertyGrid와 같은 편집기에서 하위 속성의 표시/편집 기능을 사용 중지하는 것과 관련하여 실제로 변경할 수 없습니다.

그래서 Image는 변경 불가능한 것으로 선언되지 않고 Int32는 변경 가능하지 않습니다. Int32는 확장 가능하지 않기 때문에 ImmutableObjectAttribute가 필요하지 않습니다. 이미지는 확장 가능하기 때문에 유용하지만 그렇게 유용하지는 않습니다. 그것은 단지 정말로 정말로 오도하는 이름입니다.

관련 문제