相关疑难解决方法(0)

值类型是否按定义不可变?

我经常读到structs应该是不可变的 - 根据定义它们不是吗?

你认为int是不可改变的吗?

int i = 0;
i = i + 123;
Run Code Online (Sandbox Code Playgroud)

似乎没关系 - 我们得到一个新的int并将其分配给i.那这个呢?

i++;
Run Code Online (Sandbox Code Playgroud)

好的,我们可以把它想象成一条捷径.

i = i + 1;
Run Code Online (Sandbox Code Playgroud)

怎么样struct Point

Point p = new Point(1, 2);
p.Offset(3, 4);
Run Code Online (Sandbox Code Playgroud)

这真的改变了这一点(1, 2)吗?我们难道不应该将它视为Point.Offset()返回新点的下列捷径吗?

p = p.Offset(3, 4);
Run Code Online (Sandbox Code Playgroud)

这种想法的背景是这样的 - 没有身份的价值类型怎么可能是可变的?您必须至少查看两次以确定它是否发生了变化.但是如果没有身份,你怎么能这样做呢?

我不想通过考虑ref参数和拳击来使这个推理复杂化.我也知道,p = p.Offset(3, 4);表达不变性比做得好p.Offset(3, 4);.但问题仍然存在 - 根据定义,值不是不可变的值吗?

UPDATE

我认为至少涉及两个概念 - 变量或字段的可变性以及变量值的可变性.

public class Foo
{
    private Point point; …
Run Code Online (Sandbox Code Playgroud)

.net c# immutability value-type

40
推荐指数
4
解决办法
9421
查看次数

标签 统计

.net ×1

c# ×1

immutability ×1

value-type ×1