У меня есть класс, который поддерживает список объектов другого класса.Список объектов является публичной собственностью.Я хотел бы запретить пользователям добавлять и удалять объекты непосредственно в список следующим образом:
MyObject.MyListProperty.Add(object);
Вместо этого я хочу, чтобы они использовали метод, который внутренне будет выполнять некоторую обработку, а затем добавлять объект в список.
У меня есть несколько идей:
- создать потомка
List<T>
и переопределить добавить и удалить - вернуть свежую копию списка через метод получения свойства (список относительно короткий, не более чем30 объектов)
Есть ли какой-нибудь интерфейс коллекции, в котором нет функции «Добавить и удалить»?
Редактировать:
Я собираюсь пойти с ReadOnlyCollection<T>
.Причина в том, что упакованную коллекцию можно обновить, и изменения будут немедленно видны в объекте только для чтения (см. Примеры кода MSDN для ReadOnlyCollection<T>
и AsReadOnly()
).Это позволяет создавать список только для чтения только один раз.
Проблема с IEnumerable
заключается в том, что объект может быть приведен обратно к исходному List<T>
, а затем непосредственно обработан.