1

このクラスを検討してください

class SomeObject
{
        private int x;
        public int X
        {
            get { return x; }
            set { x = value+z; }
        }

        private int y;
        public int Y
        {
            get { return y; }
            set { y = value+z ; }
        }

        private int z;
        public int Z
        {
            get {return z;}
            set { z = value+y ; }
        }
    }

私が何かをするとき

var r = new SomeObject() {X = 1, Y = 1, Z = 1 };
Console.WriteLine(r.X + " " + r.Y + " " + r.Z);

var r1 = new SomeObject() { Y = 1, X = 1, Z = 1 };
Console.WriteLine(r1.X + " " + r1.Y + " " + r1.Z);

var r2 = new SomeObject() { Z = 1, X = 1, Y = 1 };
Console.WriteLine(r2.X + " " + r2.Y + " " + r2.Z);

コンソール出力

1 1 2
1 1 2
2 2 1

コンストラクターを使用する以外に、この動作を修正する方法はありますか?

正しい出力は2 2 2

すべての回答は役に立ちましたが、すべてを最良の回答としてマークすることはできません

4

3 に答える 3

4

従属変数で値を保存する代わりに、常にゲッターでのみ計算できます。このように、それらが設定される順序は重要ではありません。例えば

    private int y;
    public int Y
    {
        get { return y +z; }
        set { y = value ; }
    }

他のプロパティについても同様です。

ただし、プロパティを介して達成しようとしていることは直感に反しており、これに遭遇した他のプログラマーにとって問題になる可能性があることを付け加えなければなりません。

于 2013-10-31T08:30:50.203 に答える
2

setこれはひどいです。アクセサの値を変更しないでください。

値を設定した場合Y = 10は、それを確認したいと思い10ます。

読み取り専用プロパティでこのようなことをします

public int XModified
{
    get { return x + z; }
}

等々。

于 2013-10-31T08:36:53.820 に答える