我正在使用带有C#项目的Visual Studio 2012 Express。我似乎记得在Visual Studio的早期版本中并非如此,我想知道这是不是一个bug。
在下面的代码中,Empty是一个静态只读字段,但可以使用Empty.Clear()
在其构造函数外修改 public struct Box
{
public static readonly float D = float.MaxValue;
public static readonly Box Empty = new Box(new Vector3(D, D, D), new Vector3(-D, -D, -D));
public Vector3 Min;
public Vector3 Max;
public Box(Vector3 min, Vector3 max)
{
Min = min;
Max = max;
}
public void Clear()
{
Min = new Vector3(D, D, D);
Max = -Min;
Empty.Clear(); // I seem to remember this should not be allowed
}
}
答案 0 :(得分:3)
您实际上没有修改字段,而是在对象上调用方法。
修改它就像是
Empty = null;
答案 1 :(得分:1)
关键字readonly
仅表明实例的引用(在引用类型的情况下)只能由构造函数设置。关键字readonly
没有说明实例中发生的事情。
如果是值类型:readonly
确保构造函数可以设置值类型而不是onyl,但它不能确保值类型本身不能从内部更改自己的值。