2

あるオブジェクトで値が変更されると、他のオブジェクトでも値が変更されるように、同じクラスのいくつかのオブジェクト間で変数を共有することは可能ですか? この場合、静的変数は機能しません。これは、すべて関連変数を持つ 2 つのオブジェクトと、別の関連変数を持つ別の 2 つのオブジェクトが存在する可能性があるためです。

たとえば、1 つの大きな正方形を作るように配置された 4 つの正方形があり、正方形の座標が x、y、z 平面にあるとします。4つの正方形が一緒になると、それらはすべて最大の正方形の中心にあるポイントを持ちます.

この正方形にも z 座標があるとします。これで、すべての正方形が中心にある点を共有します。左上の正方形の右下隅、右上の正方形の左下隅などは、すべて同じ (x, y, z) 値になります。

今私が欲しいのは、1 つの正方形の z 値が変更された場合、すべてが同じメモリ位置を指しているように、追加のコードなしですべて変更されるため、ある意味で「自動的に」更新されることです。

このようなことは可能ですか?

4

3 に答える 3

4

これを行う 1 つの方法を次に示します。各正方形のデータ プロパティは同じ参照を指しています。

class Square 
{
     private SharedData Data;

     public Square(SharedData data)
     {
        this.Data = data;
     }
}

class SharedData
{
     public double Z { get; set; }
}

SharedData data = new SharedData() { Z = 100.0 }

Square topLeft = new Square(data);
Square topRight = new Square(data);
Square bottomLeft = new Square(data);
Square bottomRight = new Square(data);

SharedData必要に応じて、正方形への読み取り専用アクセスを提供するインターフェイスを配置できます。正方形が Z の値を変更しないと想定されている場合、これはより安全なアプローチになります。

interface IReadOnlyData
{
    double GetZ();
}

class SharedData : IReadOnlyData
{
     public double Z { get; set; }
     IReadOnlyData.GetZ() { return Z; }
}

class Square
{
    private IReadOnlyData Data;

    public Square(IReadOnlyData data)
    {
        this.Data = data;
    }
}
于 2013-04-12T04:18:58.303 に答える
3

あなたはこれについて間違った方法で考えていると思います。すべての正方形を論理的に 1 つのオブジェクトとして扱う場合は、それらすべてをカプセル化し、必要なロジックを提供する 1 つのオブジェクトを作成します。IMO の背後で他のオブジェクトの値をこっそり変更するオブジェクトを持つべきではありません。

于 2013-04-12T03:48:19.903 に答える
1

観察可能なパターンを実装します。

この投稿を確認してください: デリゲートを使用した C# オブザーバー/オブザーバブルの超単純な例

お役に立てば幸いです。

于 2013-04-12T12:25:19.167 に答える