ImmutableObject属性提供了哪些好处?

时间:2016-01-06 19:00:44

标签: .net vb.net immutability mutable

我正在测试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中不是真正不可变的)。

1 个答案:

答案 0 :(得分:7)

来自ImmutableObjectAttribute Class文档:

  

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

......是的,这只是为了装饰。