Jak wywoływać metody "parami"?

Jak wywoływać metody "parami"?
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam, problem opiszę na takim oto prostym przykładzie:

Kopiuj
class Person
{
    public Car CarOwned { get; private set; }

    public void AddCar(Car car)
    {
        this.CarOwned = car;
    }
}
class Car
{
    public Person OwnedBy { get; private set; }

    public void ChangeOwner(Person owner)
    {
        this.OwnedBy = owner;
    }
}

Chodzi o to, żeby metody AddCar i ChangeOwner zawsze były wykonywane razem (bez zapętlenia), tak by uniknąć sytuacji, że we właściwości CarOwned obiektu person1 był ustawiony car1, a we właściwości OwnedBy obiektu car1 była ustawiona inna wartość niż person1. Właściwości muszą pozostać jako readonly z zewnątrz (z tego samego powodu - aby uniknąć zerwania relacji).

Z góry dziękuję za pomoc :)

T8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 76
0
Kopiuj
    public void ChangeOwner(Person owner)
    {
        this.OwnedBy = owner;
        owner.addCar(this);
    }
 
  • Rejestracja: dni
  • Ostatnio: dni
0

W ten sposób nie uniknę zapętlenia, gdyż trzeba by dodać analogiczną linijkę do metody AddCar w klasie Owner. Zależność musi działać w obie strony.

T8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 76
2

Masz rację, sorry. A jakbyś dodał:

Kopiuj
 
    public void ChangeOwner(Person owner)
    {
        this.OwnedBy = owner;
        if(owner.CarOwned()!=this){
             owner.addCar(this);
        }
    }

I analogicznie w Owner ?

  • Rejestracja: dni
  • Ostatnio: dni
0

Działa! Pięknie dziękuję za szybką i konkretną pomoc. Rozwiązanie prostsze niż się spodziewałem, ale czasem tak jest, że najprostsze rzeczy najtrudniej wymyślić.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Tylko że taki model jest chyba błędny bo osoba może posiadać kilka samochodów, nie wspominając już o samochodzie który może stanowić wspólną własność kilku osób.

Zenek1999
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 51
1

Niepotrzebnie tworzysz nową metodę, skorzystaj z akcesorów (set).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.