Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不可变变量和不可变对象_C#_.net_Immutability - Fatal编程技术网

C# 不可变变量和不可变对象

C# 不可变变量和不可变对象,c#,.net,immutability,C#,.net,Immutability,不可变对象和不可变变量之间有什么区别?它们都是不变的吗 不可变变量是根本无法更改的变量。但对于简单类型,不可变变量还有其他名称或术语吗?我们可以使用只读还是有专门的术语 不可变对象和不可变变量之间有什么区别 不可变对象是指其值意味着其属性值不能通过外部访问器或内部方法更改的对象 C有不可变的变量吗 如果你考虑类成员变量,那么是的。如果不是,那么,C++有恒定的局部变量的概念,但是C没有。 对于简单类型,不可变变量是否还有其他名称或术语 不是局部变量意义上的。在C中,有两种类型的类成员不能更改。一

不可变对象和不可变变量之间有什么区别?它们都是不变的吗

不可变变量是根本无法更改的变量。但对于简单类型,不可变变量还有其他名称或术语吗?我们可以使用只读还是有专门的术语

不可变对象和不可变变量之间有什么区别

不可变对象是指其值意味着其属性值不能通过外部访问器或内部方法更改的对象

C有不可变的变量吗

如果你考虑类成员变量,那么是的。如果不是,那么,C++有恒定的局部变量的概念,但是C没有。 对于简单类型,不可变变量是否还有其他名称或术语

不是局部变量意义上的。在C中,有两种类型的类成员不能更改。一个是只读的,可以在运行时将其设置为静态redaonly字段的对象构造或静态构造的一部分

另一个是常量,与readonly类似,但常量的值被烘焙到类的二进制代码中,这意味着每当引用字段时,该值都被替换到编译代码中

不可变对象和不可变变量之间有什么区别

不可变对象是指其值意味着其属性值不能通过外部访问器或内部方法更改的对象

C有不可变的变量吗

如果你考虑类成员变量,那么是的。如果不是,那么,C++有恒定的局部变量的概念,但是C没有。 对于简单类型,不可变变量是否还有其他名称或术语

不是局部变量意义上的。在C中,有两种类型的类成员不能更改。一个是只读的,可以在运行时将其设置为静态redaonly字段的对象构造或静态构造的一部分

另一个是常量,类似于readonly,但常量的值被烘焙到类的二进制代码中,这意味着任何时候引用字段时,该值都会被替换到编译代码中。

不可变对象是一个不能更改的对象,期望您重新获得相同的对象。这可能有点让人困惑,所以让我来解释一个我能想到的最简单的例子。假设我有以下代码:

string myString = "Hello World!";
字符串是不可变对象的一个示例。现在,显然您可以更改myString的值,但是,您这样做并不是简单地更改myString对象。该语言实际上创建了myString将指向的新字符串对象。我记不起这是如何工作的确切细节,原因是,请参阅

另一方面,在我的经验中,不可变变量通常被称为常量或常量字段,不能更改。如果您试图以任何方式修改它,编译器将发出抱怨。有很多原因让你想这样做,谷歌搜索会给你几十个。简言之,将字段设置为常量,您知道该值永远不会也不应该更改,即使是意外更改

这可能是一个较弱的示例,但假设您有一个构建车辆对象的程序,并且您知道您需要的车轮最多为18个。你可以说:

const int MAX_WHEELS = 18;
这永远不会因为偶然而改变。无论何时使用MAX_车轮,它都将始终为18。我不知道细节,但编译器可能只是用value in替换字段名,但也许有人可以纠正我的错误。

不可变对象是指不能更改的对象,期望您重新获得相同的对象。这可能有点让人困惑,所以让我来解释一个我能想到的最简单的例子。假设我有以下代码:

string myString = "Hello World!";
字符串是不可变对象的一个示例。现在,显然您可以更改myString的值,但是,您这样做并不是简单地更改myString对象。该语言实际上创建了myString将指向的新字符串对象。我记不起这是如何工作的确切细节,原因是,请参阅

另一方面,在我的经验中,不可变变量通常被称为常量或常量字段,不能更改。如果您试图以任何方式修改它,编译器将发出抱怨。有很多原因让你想这样做,谷歌搜索会给你几十个。简言之,将字段设置为常量,您知道该值永远不会也不应该更改,即使是意外更改

这可能是一个较弱的示例,但假设您有一个构建车辆对象的程序,并且您知道您需要的车轮最多为18个。你可以说:

const int MAX_WHEELS = 18;
这永远不会因为偶然而改变。无论何时使用MAX_车轮,它都将始终为18。我不知道

他提供了详细信息,但似乎编译器只会用value in替换字段名,但也许有人可以纠正我的错误。

不可变变量肯定是一个矛盾修饰法:不可变=不能更改,可变=可以更改。变量实际上并不被认为是不可变的,因为根据定义,它们随上下文的不同而不同。不可变变量是不能重新分配的变量,不可变对象是不能变异的对象,所以它们不一样。你可以有一个指向可变对象的不可变变量和一个分配给不可变对象的可变变量@危险地带不可变变量是一个自相矛盾的说法:不可变=不能改变,可变=可以改变。变量实际上并不被认为是不可变的,因为根据定义,它们随上下文而变化。不可变变量是不能重新分配的变量,不可变对象是不能变异的对象,所以不,它们是不同的。你可以有一个指向可变对象的不可变变量和一个分配给不可变对象的可变变量@DangerZonether也是只读关键字。这种差异是被解释的,所以它只是常量还是常量变量?但是谢谢你的回答,现在我脑子里的很多事情都清楚了。大多数人都会说常量。常量变量没有真正意义,它是一个矛盾修饰法。常量=不能更改。变量=变化。所以常数变量=一个不能改变的变化的东西。但我认为变量是一个存储值的地方。可以读回或更改。它是。这就是为什么说一个不可变的变量没有真正的意义,尽管它在技术上是真实的。因为不可变意味着它不能被改变。这只是一个令人困惑的术语。将常量添加到变量只意味着您无法更改它。如果我修改了你上面的评论来描述常量变量:常量是存储值的地方,可以读回。这就是为什么我们通常不称它们为不可变变量或常量变量,而是更喜欢常量或常量字段。这种差异是被解释的,所以它只是常量还是常量变量?但是谢谢你的回答,现在我脑子里的很多事情都清楚了。大多数人都会说常量。常量变量没有真正意义,它是一个矛盾修饰法。常量=不能更改。变量=变化。所以常数变量=一个不能改变的变化的东西。但我认为变量是一个存储值的地方。可以读回或更改。它是。这就是为什么说一个不可变的变量没有真正的意义,尽管它在技术上是真实的。因为不可变意味着它不能被改变。这只是一个令人困惑的术语。将常量添加到变量只意味着您无法更改它。如果我修改了你上面的评论来描述常量变量:常量是存储值的地方,可以读回。这就是为什么我们通常不称它们为不可变变量或常量变量,而是更喜欢常量或常量字段。