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);

Инициализирует новую коллекцию, содержащую элементы в списке, которые будут блокировать предоставленный вами объект.

Документация хорошо объясняет это. Это стоит прочитать.

Другие вопросы по тегам