Я использую Visual Studio 2012 Express с проектом C#. Кажется, я помню, что это не было в предыдущих версиях визуальной студии, и мне интересно, является ли это ошибкой.Метод в поле readonly может изменить метод вне конструктора?
В коде ниже 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
}
}
ну, это ссылочный тип, поэтому я не особо удивлен этим –
да, я считаю, что объект может манипулировать собой после его установки, однако сам объект не может быть изменен, например, если он был string, и вы пытаетесь сделать «x =» hello »;' он потерпит неудачу. – Timmerz
Вызов метода мутации (но не средства настройки свойств) всегда разрешался. Но компилятор должен вставить защитную копию, поэтому исходное поле не будет изменено - изменяется только копия. Можете ли вы проверить, что поле изменилось? Если да, я бы подумал, что это ошибка. – CodesInChaos