C # - объединить два объекта одного класса и обновить все ссылки? - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть несколько объектов Foo, которые содержатся в объектах Bar:

class Foo
{
    int uniqueId; // every Foo has a different ID.
    List<int> data;
}

class Bar
{
    Foo foo = new Foo();
}

Иногда я хочу объединить объекты Foo, принадлежащие разным барам, следующим образом:

public void MergeWith(Bar otherBar)
{
    this.foo.uniqueId = otherbar.foo.uniqueId;
    this.foo.data.AddRange(otherbar.foo.data);     

    otherBar.foo = this.foo;
    // Now both Bar objects refer to the same Foo, which contains all the data.
}
Bar bar1;
Bar bar2;
bar1.MergeWith(bar2);

Это хорошо. Проблема в том, что эти объекты Bar раздали ссылки на свои Foo объекты на Baz объекты. Baz имеет List<Foo>, собранных из нескольких источников.

Как я могу получить Baz объекты, чтобы знать, когда их Foo устарели? Должны ли объекты Foo иметь ссылку на их "более новый" Foo стиль связанного списка? Или есть лучший способ?

1 Ответ

0 голосов
/ 05 апреля 2011

Я могу думать только о двух способах, которыми рано утром:

  • Не раздавать ссылку, всегда используйте свойство для возврата текущей ссылки
  • Реализация события OnFooChangeи опубликовать изменения всем заинтересованным сторонам из класса / экземпляра бара

hth

Mario

...