#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
Марио