C # — объединить два объекта одного класса и обновить все ссылки?

#c# #.net #merge

#c# #.net #объединить

Вопрос:

У меня есть несколько объектов 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. Можете ли вы показать, как Baz объекты получают Foo ссылки из Bar ? Кто отвечает за настройку Baz.Foos ?

Ответ №1:

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

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

hth

Марио