0

更新:質問の言い回しが間違っていました。内側と外側の緯度/経度メンバーの両方が相互に更新する必要があるため、再帰が発生します。外側のメンバーはデータベース コンテキストによって更新され、内側のメンバーは UI によって更新されます。そのため、データベースからの変更はすべて UI に伝達する必要があり、その逆も同様です。Coordinates クラスは UI から分離できず、外部メンバーはデータベースから分離できません。

再帰を防ぐためのフラグがこれを回避する最も簡単な方法だと思います。

次のクラスがあります。

class Coordinates
{
    public double Latitude { get; set; }
    public double Longitude { get; set; }
}

class Location
{
    public string Name { get; set; }

    public Coordinates Coordinates { get; set; }

    public double CoordinateLatitude
    {
        get { return (this.Coordinates.Latitude); }
        set { /* This member needs to get updated every time Location.Coordinates.Latitude gets updated. */ }
    }

    public double CoordinateLongitude
    {
        get { return (this.Coordinates.Latitude); }
        set { /* This member needs to get updated every time Location.Coordinates.Latitude gets updated. */ }
    }
}

メンバーCoordinateLatitudeCoordinateLongitudeCoordinates クラスへのマップ。私が達成したいのはその逆でもあります。したがって、Coordinatesクラスが更新されると、クラスのメンバーLocationも更新される必要があります。現時点でコードを変更する自由がないため、コードがそのように構成されている理由を聞かないでください。

Coordinates クラスのメンバーを設定するコードがプロジェクト全体にたくさんありlocation.Coordinates.Latitude = 10.0D;ますCoordinates:イベントに。

私の質問は、Location.Coordinates メンバーに Location.CoordinateLatitude 値を更新させるにはどうすればよいですか? IDisposable(イベントの場合のように) クリーンアップを必要とせずに、そのようなコールバックを設定する標準的な方法はありますか?

4

4 に答える 4

0

Coordinatesはクラスであるため、変更すると、同じインスタンスを使用している変数が自動的に更新されます。あなたが正しくやりたいことを私が理解していると仮定すると、あなたのセットは次のようになります:

public double CoordinateLatitude
{
    get { return (this.Coordinates.Latitude); }
    set { this.Coordinates.Latitude = value; }
}

public double CoordinateLongitude
{
    get { return (this.Coordinates.Longitude); }
    set { this.Coordinates.Longitude = value;  }
}

編集:構造体の場合、これは別の方法で行う必要がありますCoordinates。これはthis.Coordinates、その場合に がコピーを取得するためです。

public double CoordinateLongitude
{
    get { return (this.Coordinates.Longitude); }
    set {
        Coordinate temp = this.Coordinates;
        temp.Longitude = value;
        this.Coordinates = temp;
    }
}
于 2013-05-06T17:36:41.530 に答える