C#, SynchronizedReadOnlyCollection и его конструкторы
.net класс SynchronizedReadOnlyCollection имеет 4 конструктора.
public SynchronizedReadOnlyCollection();
public SynchronizedReadOnlyCollection(object syncRoot);
public SynchronizedReadOnlyCollection(object syncRoot, IEnumerable<T> list);
public SynchronizedReadOnlyCollection(object syncRoot, params T[] list);
Какая польза от конструктора без параметров и конструктора только с объектом блокировки? Коллекция всегда будет пустой, если вы не заполните ее при создании? Я что-то пропустил?
2 ответа
В какой-то момент возможно, что вам понадобится пустая коллекция, например, если вы инициализируете класс, а данные не известны, когда вызывается конструктор. Если вы не назначите пустую коллекцию, другой код может потерпеть неудачу, если он попытается получить доступ к этому полю / свойству и выдаст исключение NullReferenceException. Если данные предоставляются на более позднем этапе, этот код просто заменяет поле новым заполненным экземпляром SynchronizedReaOnlyCollection
,
public SynchronizedReadOnlyCollection();
Инициализирует новую пустую коллекцию, которая будет блокироваться во внутреннем поле.
public SynchronizedReadOnlyCollection(object syncRoot);
Инициализирует новую пустую коллекцию, которая заблокирует предоставленный вами объект.
public SynchronizedReadOnlyCollection(object syncRoot, IEnumerable<T> list);
Инициализирует новую коллекцию, содержащую элементы в списке, которые будут блокировать предоставленный вами объект.
Документация хорошо объясняет это. Это стоит прочитать.