C#中的不可变类型

时间:2015-01-29 11:30:56

标签: c# .net

我试图理解不可变类型。我知道字符串是不可变的,以及anonymouse类型,delagates,但这个怎么样?其中哪些在C#中是不可变的,为什么?你能解释一下吗? DataSet,Label,DateTime,object,ArrayList

1 个答案:

答案 0 :(得分:2)

DateTimestruct(=值类型)且不可变,但其余的(DataSet, Label, object, ArrayList)是可变的:

无法编辑DateTime类型的对象 - 其上的所有方法都返回一个新的DateTime对象。所有其他人都可以改变 object有点特别,因为它可以是"任何"所以AFAIK它不被称为不可变的。

一般而言,"不可变的"意味着对象在创建后无法更改。正如Tim struct所正确指出的那样,默认情况下是可变的,但通常以不可变的方式实现。因此,所述值类型可以是可变的,但大多数情况下它不是。请参阅THIS小例子,当您使用可变值类型时会发生什么。