我正在尝试了解一些基本概念:
class Program
{
private static readonly MyStruct m = new MyStruct();
static void Main(string[] args)
{
//new MutableSample().RunSample();
Console.WriteLine(m.ChangeInternal());
Console.WriteLine(m.ChangeInternal());
Console.WriteLine(m.ChangeInternal());
Console.Read();
}
}
public struct MyStruct
{
private int x;
public int ChangeInternal()
{
this.x = this.x + 1;
return this.x;
}
}
当我运行此代码时,它会给我1,1,1,但是当我删除“只读”时,它会给我1,2,3。
有人可以向我解释吗?
最佳答案
C#规范的7.5.4节指出:
因此,当该字段是readonly
时,您正在变异一个副本(因为不可能变异一个值,只能变异一个变量)。如果不是,那么您就是在更改字段本身。
埃里克·利珀特(Eric Lippert)在this blog post中对此进行了更详细的描述。引用其结尾: