Jak wywoływać metody "parami"?

0

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

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 :)

0
    public void ChangeOwner(Person owner)
    {
        this.OwnedBy = owner;
        owner.addCar(this);
    }
 
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.

2

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

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

I analogicznie w Owner ?

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ć.

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.

1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1