Лично я бы реализовал IList<T>
в классе, который имеет Added
, Removed
и Replaced
события / делегаты. Класс будет иметь закрытый экземплярный экземпляр типа List<T>
, которому будут делегированы все реализованные вызовы, а также вызов события.
Вы можете дополнительно иметь OnBefore...
, OnAfter
, если хотите, что позволит вам "отменить" добавление / удаление элементов.
Обычно это так, но, как сказал mookid, вероятно, существуют существующие библиотеки, которые делают аналогичные вещи. Класс DataTable
реализует аналогичную концепцию с классом DataRow
, включая добавление, удаление и обновление.
Вы можете объединить понятия, чтобы элементы, добавленные в коллекцию, могли вызывать OnChanged
события, которые «всплывают» в коллекцию и могут использоваться для повторного вызова события ItemChanged
в коллекции.