readonly字段上的方法可以修改构造函数之外的方法吗?

时间:2013-04-24 21:33:50

标签: c# visual-studio-2012

我正在使用带有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
    }
}

2 个答案:

答案 0 :(得分:3)

您实际上没有修改字段,而是在对象上调用方法。

修改它就像是

Empty = null;

答案 1 :(得分:1)

关键字readonly仅表明实例的引用(在引用类型的情况下)只能由构造函数设置。关键字readonly没有说明实例中发生的事情。

如果是值类型:readonly确保构造函数可以设置值类型而不是onyl,但它不能确保值类型本身不能从内部更改自己的值。