如何使用ImmutableObjectAttribute?

Tho*_*que 12 .net immutability

我正在寻找一个内置属性来指定一个类型是不可变的,我只找到了 System.ComponentModel.ImmutableObjectAttribute.

使用Reflector,我检查了它的使用位置,似乎唯一使用它的公共类是System.Drawing.Image ... WTF?它可以用在string,int或任何基本类型上,但Image绝对不是不可变的,有很多方法可以改变它的内部状态(例如使用Graphics或Bitmap.SetPixel方法).

所以BCL中唯一明确声明为不可变的类可变的!或者我错过了什么?

Dar*_*rov 10

文件说明:

此属性通常在"属性"窗口中用于确定是否将可扩展对象呈现为只读.因此,此属性仅在设计时使用.

Reflector显示使用此属性的唯一方法是System.Windows.Forms.PropertyGridInternal.GridEntry.Flags设计属性网格使用的内部属性getter.


Jef*_*tin 6

我认为您有ImmutableObjectAttribute混淆的用法-这意味着对象的属性不应在表单设计器或类似的设计时UI中进行编辑而不是对象本身是不可变的。

此属性可能是每日WTF的候选者,但是...