1

我在 C# 项目中使用 Visual Studio 2012 Express。我似乎记得在以前版本的 Visual Studio 中情况并非如此,我想知道这是否是一个错误。

在下面的代码中,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
    }
}
4

2 回答 2

3

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

修改它就像

Empty = null;
于 2013-04-24T21:35:30.753 回答
1

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

在值类型的情况下:readonly确保构造函数可以设置值类型,但不确保值类型本身不能从内部更改自己的值。

于 2013-04-24T21:35:39.877 回答