ImmutableObject 属性有什么好处?
What benefit does the ImmutableObject attribute provide?
我测试 ImmutableObjectAttribute
属性只是出于好奇,看看我是否可以通过应用它获得一些好处,或者它是否只是用于语义修饰...
Specifies that an object has no subproperties capable of being edited.
所以我有这个 class:
<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
属性只是装饰属性吗?
那为什么会有这个属性呢?我找不到用此属性标记 class 的任何好处,它不能确保成员确实是不可变的,或者至少是 .Net 所理解的不可变(你知道,就像 String 在 .Net 中并不是真正不可变的) .
来自 ImmutableObjectAttribute Class 文档:
This attribute is typically used in the Properties window to determine
whether to render an expandable object as read-only. As such, this
property is used only at design time.
...所以是的,这只是为了装饰。
我测试 ImmutableObjectAttribute
属性只是出于好奇,看看我是否可以通过应用它获得一些好处,或者它是否只是用于语义修饰...
Specifies that an object has no subproperties capable of being edited.
所以我有这个 class:
<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
属性只是装饰属性吗?
那为什么会有这个属性呢?我找不到用此属性标记 class 的任何好处,它不能确保成员确实是不可变的,或者至少是 .Net 所理解的不可变(你知道,就像 String 在 .Net 中并不是真正不可变的) .
来自 ImmutableObjectAttribute Class 文档:
This attribute is typically used in the Properties window to determine whether to render an expandable object as read-only. As such, this property is used only at design time.
...所以是的,这只是为了装饰。