Каждый раз, когда я создаю объект, у которого есть свойство коллекции, я делаю все возможное, чтобы сделать это?
- государственная собственность с геттером, которая возвращает ссылку на закрытую переменную
- Явный get_ObjList и set_ObjList методы, возвращающие и создающие новые или клонированные объекты каждый раз
- Явный get_ObjList, который возвращает IEnumerator и set_ObjList, что принимает IEnumerator
Имеет ли значение значение, если коллекция представляет собой массив (т.е. objList.Clone()) в сравнении с List?
Если возврат фактической коллекции в качестве ссылки настолько плох, потому что она создает зависимости, то зачем возвращать какое-либо свойство в качестве ссылки? Каждый раз, когда вы выставляете дочерний объект в качестве ссылки, внутренности этого дочернего элемента могут быть изменены без родительского "знания", если у ребенка нет события с изменением свойства. Существует ли риск утечек памяти?
И, не нужно ли переделывать сериализацию 2 и 3? Является ли это уловкой 22 или вам нужно реализовать пользовательскую сериализацию в любое время, когда у вас есть свойство коллекции?
Общий ReadOnlyCollection выглядит как хороший компромисс для общего использования. Он завершает IList и ограничивает доступ к нему. Возможно, это помогает с утечками памяти и сериализации. Однако он все еще имеет перечисление проблем
Возможно, это просто зависит. Если вам все равно, что коллекция изменена, просто покажите ее как открытый аксессуар по частной переменной на # 1. Если вы не хотите, чтобы другие программы модифицировали коллекцию, лучше # 2 и/или #.
Неявный вопрос заключается в том, почему следует использовать один метод над другим и каковы последствия для безопасности, памяти, сериализации и т.д.?