我正在测试ImmutableObjectAttribute
属性只是为了好奇,看看我是否可以获得一些应用它的好处,或者它是否只是用于语义修饰......
指定对象没有能够编辑的子属性。
所以我有这个课程:
<ImmutableObject(True)>
Public Class TestClass
<ImmutableObject(True)>
Public sb As StringBuilder
Public Sub New()
sb = New StringBuilder
End Sub
End Class
我已经使用此代码进行了测试:
Dim obj As New TestClass
obj.sb.Append("Hello")
obj.sb.Append(" ")
obj.sb.Append("World")
MsgBox(obj.sb.ToString)
然后,在我在可变对象中应用ImmutableObject
属性后,我希望看到某种编译器警告,某种运行时异常,或者只是从内部字符串中收到一个意外的值。 StringBuilder
,但没有发生任何事情,似乎一切正常。
这让我想到一个问题的答案显而易见的问题,但我需要问一下:
ImmutableObject
属性只是一个装饰属性吗?。为什么存在这个属性呢?我找不到任何标记具有此属性的类的beneffit它不能确保成员真的是不可变的,或者至少是.Net理解为不可变的(你知道,就像String在.Net中不是真正不可变的)。
答案 0 :(得分:7)
来自ImmutableObjectAttribute Class文档:
此属性通常在“属性”窗口中用于确定 是否将可扩展对象呈现为只读。因此,这个 属性仅在设计时使用。
......是的,这只是为了装饰。