不可变对象和不可变变量之间有什么区别?他们都不可改变?
不可变变量是无法更改的变量。但对于简单类型,不可变变量是另一个名称还是一词?我们可以使用"只读" 还是特定字词?
答案 0 :(得分:4)
不可变对象和不可变变量之间有什么区别?
不可变对象是一个对象,其值(意味着其属性值)不能通过外部访问器或内部方法更改。
C#是否具有“不可变变量”?
如果你认为班级成员是“变量”,那么是。如果没有,则编号C ++具有“常量”局部变量的概念,但C#没有。
对于简单类型,是否存在不可变变量的另一个名称或术语?
不在“局部变量”意义上。在C#中,有两种类型的类成员无法更改。一个是readonly
,可以在运行时设置为对象构造的一部分(或static redaonly
字段的静态构造)。
另一个是constant
,类似于readonly
,但常量的值是烘焙到二进制代码中class,意思是在引用字段的任何时候将值替换为已编译的代码。
答案 1 :(得分:1)
不可变对象是一个无法更改的对象(期望您获得相同的对象)。这可能有些令人困惑,所以让我解释一下我能想到的最简单的例子。说我有以下代码:
string myString = "Hello World!";
字符串是不可变对象的一个示例。现在,显然您可以更改myString
的值,但是,当您执行此操作时,不仅仅是对myString
对象进行更改。该语言实际上创建了一个myString
将指向的新字符串对象。 (我不记得完全有关其工作原理的详细信息,原因如下,请参阅this answer)
//This is creating a new string object, although it looks like a simple
//manipulation of what currently exists.
myString = "Goodbye World!";
另一方面,不可变变量(正如你所说)(通常称为“常量”或“常量字段”)我的经历),不能改变。如果您尝试以任何方式修改它,您的编译器会抱怨。 为什么你想要这样做有很多原因(谷歌搜索会给你几十个)。简而言之,即使是偶然的,你也要知道价值永远不应该改变的地方。
这可能是一个很弱的例子,但是你说你有一个构建Vehicle
对象的程序,而且你知道你需要的轮子最多的是18个。你可以说:
const int MAX_WHEELS = 18;
这不可能偶然改变。任何时候你使用MAX_WHEELS,它总是18。我不知道细节,但似乎编译器只会将值替换为字段名称,但也许有人可以纠正我。