mutable和immutable有什么区别?

时间:2010-09-28 08:38:47

标签: c#-4.0

任何人都可以帮助我找到可变和不可变之间的基本区别吗?

7 个答案:

答案 0 :(得分:13)

Immutable表示一旦初始化,对象的状态就不会改变。

可变意味着它可以。

例如 - .NET中的字符串是不可变的。无论何时对字符串(修剪,上部外壳等)进行操作,都会创建一个新字符串。

实际上,如果要创建不可变类型,只允许在其上使用getter并且不允许任何状态更改(因此,一旦构造函数完成运行,任何私有字段都不会更改。)

答案 1 :(得分:4)

very basic definition将是:

  

可变对象:当您引用对象的实例时,该实例的内容可以更改

     

不可变对象:当您引用对象的实例时,该实例的内容无法更改

答案 2 :(得分:3)

Immutable表示“创建后无法修改”。

  • 不可变类型有构造函数和getter,但没有setter。
  • 可变类型也可以有setter。

不可变类型的示例是DateTime。方法AddMinutes不会修改对象 - 它会创建并返回一个新的DateTime。

另一个例子是字符串。对于类似于string的可变类,您可以使用类StringBuilder

C#中没有关键字将类型声明为不可变。相反,您应将所有成员字段标记为readonly,以确保它们只能在构造函数中设置。这样可以防止您意外修改其中一个字段,从而破坏不变性。

答案 3 :(得分:2)

实例化后,不能更改不可变类型。例如,字符串是不可变的。每次要更改字符串的值时,都会创建一个新实例。

答案 4 :(得分:1)

在函数语言中使用的不可变变量。 使用术语变量是不合适的功能程序员 更喜欢术语价值。

答案 5 :(得分:1)

不变性的优点:

1螺纹安全
2分享
3不易出错

如果您有选择,那么更喜欢不变性。 :)

答案 6 :(得分:0)

使用参考
imaginationhunt.blogspot

IS STRING MUTABLE OR IMMUTABLE IN .NET?

可变:可变意味着在创建状态后可以更改其状态 不可变:不可变的意味着一旦创建状态就无法改变。

字符串对象是'不可变的',这意味着我们无法修改字符串中包含的字符,对字符串的操作也会生成修改后的版本,而不是修改字符串的字符。