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 に答える