gpt4 book ai didi

c# - 为什么只读结构上的突变不会中断?

转载 作者:可可西里 更新时间:2023-11-01 08:10:14 26 4
gpt4 key购买 nike

在 C# 中,如果你有一个像这样的 struct:

struct Counter
{
private int _count;

public int Value
{
get { return _count; }
}

public int Increment()
{
return ++_count;
}
}

你有这样一个程序:

static readonly Counter counter = new Counter();

static void Main()
{
// print the new value from the increment function
Console.WriteLine(counter.Increment());
// print off the value stored in the item
Console.WriteLine(counter.Value);
}

程序的输出将是:

1
0

这似乎是完全错误的。我希望输出是两个 1(如果 Counter 是一个 class 或者如果 struct Counter : ICounter counter 是一个 ICounter) 或者是一个编译错误。我意识到在编译时检测到这一点是一件相当困难的事情,但这种行为似乎违反了逻辑。

这种行为是否存在超出实现难度的原因?

最佳答案

structs 是值类型,因此具有值类型语义。这意味着每次访问该结构时,您基本上都是在使用该结构值的副本。

在您的示例中,您不会更改原始的 struct,而只会更改它的临时副本。

更多解释请看这里:

Why are mutable structs evil

关于c# - 为什么只读结构上的突变不会中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3859534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com