问题
I was testing the ImmutableObjectAttribute
attribute just for curiosity to see if I could gain some beneffits applying it, or if it was just for semantic decoration...
- ImmutableObjectAttribute Class
Specifies that an object has no subproperties capable of being edited.
So I have this class:
<ImmutableObject(True)>
Public Class TestClass
<ImmutableObject(True)>
Public sb As StringBuilder
Public Sub New()
sb = New StringBuilder
End Sub
End Class
And I've tested with this code:
Dim obj As New TestClass
obj.sb.Append("Hello")
obj.sb.Append(" ")
obj.sb.Append("World")
MsgBox(obj.sb.ToString)
Then, after I'd applied the ImmutableObject
attribute in a mutable object, I expected to see some kind of compiler warning, some sort of runtime exception, or just receive an unexpected value from the internal string of the StringBuilder
, but nothing of that things happened, all seems to work as normally.
That makes me think a question whose answer seems obvious, but I need to ask it:
- Is the
ImmutableObject
attribute just a decorative attribute?.
Why exists this attribute then? I cannot find any beneffit marking a class with this attribute it it not ensures that the members are really immutable, or at least what .Net understands for immutable (you know, like a String is not really immutable in .Net).
回答1:
From the ImmutableObjectAttribute Class documentation:
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.
... so yes, this is only for decoration.
来源:https://stackoverflow.com/questions/34640695/what-benefit-does-the-immutableobject-attribute-provide