업데이트 : 나는 틀린 질문을 표현했습니다. 내부 및 외부 위도/경도 멤버 모두 서로를 업데이트해야 재귀가 발생합니다. 외부 멤버는 데이터베이스 컨텍스트에 의해 업데이트되고 내부 멤버는 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. */ }
}
}
회원 CoordinateLatitude
과 좌표 클래스에 CoordinateLongitude
지도 :
는 나는 다음과 같은 클래스가 있습니다. 내가 성취하고자하는 것은 그 반대입니다. 따라서 Coordinates
클래스가 업데이트되면 Location
클래스의 멤버도 업데이트해야합니다. 지금 코드를 변경하는 자유가 없기 때문에 코드가 왜 구조화되어 있는지 묻지 마십시오.
등의 클래스를 구성하는 코드가 프로젝트 전체에 걸쳐 있습니다. Coordinates
클래스 (및 기타 많은 클래스)는 가벼운 데이터 구조이므로 많은 곳에서 부주의하게 사용되므로 이벤트에 넥타이하고 싶지는 않습니다.
내 질문은 어떻게 Location.Coordinates 멤버가 Location.CoordinateLatitude 값을 업데이트하도록 할 수 있습니까? IDisposable
(이벤트가있는 경우와 같이)을 정리하지 않고 이러한 콜백을 설정하는 표준 방법이 있습니까? Longitude
에 CoordinateLongitude
에서
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. */ }
}
변경 Latitude
:
이벤트를 원한다고해도 속성 이벤트 리스너가 필요합니다. –
이것은 이미 사용자가 묻는 것을 수행하는 것으로 보입니다 ... – FlyingStreudel
'set' 메소드를 연결하는 방법은 기본 설정과 같습니다. 'get' 메소드를 사용하면 원하는 것을 할 수 있습니다. 콜백이 필요 없습니다. public 속성 인 'CoordinateLatitude'와 'CoordinateLongitude'를 'Coordinates'멤버의 별칭으로 생각하십시오. –