我正在使用Visual Studio 2012 Express與C#項目。我似乎記得早期版本的Visual Studio中並非如此,我想知道這是否是一個錯誤。readonly字段上的方法可以修改構造函數之外的方法嗎?
在下面空的代碼是一個靜態只讀字段,但它的構造函數外()進行修改與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
}
}
好吧,它是一個引用類型,所以我並不特別感到驚訝,這個 – 2013-04-24 21:35:42
是的,我相信對象可以在設置後自己操作,但是對象本身不能改變,例如,如果它是一個字符串,你試着做'x =「hello」;'它會失敗。 – Timmerz 2013-04-24 21:35:44
一直被允許調用變異方法(但不是屬性設置器)。但是編譯器應該插入一個防禦副本,所以原始字段不會被更改 - 只有副本被更改。你能證實該領域得到改變嗎?如果是的話,我會考慮一個錯誤。 – CodesInChaos 2013-04-24 22:06:26