C #, SynchronizedReadOnlyCollection и его конструкторы - PullRequest
2 голосов
/ 28 августа 2010

.net класс SynchronizedReadOnlyCollection имеет 4 конструктора.

    public SynchronizedReadOnlyCollection();
    public SynchronizedReadOnlyCollection(object syncRoot);
    public SynchronizedReadOnlyCollection(object syncRoot, IEnumerable<T> list);
    public SynchronizedReadOnlyCollection(object syncRoot, params T[] list);

Какая польза от конструктора без параметров и конструктора только с объектом блокировки? Коллекция всегда будет пустой, если вы не заполните ее при создании? Я что-то пропустил?

Ответы [ 2 ]

4 голосов
/ 28 августа 2010

В какой-то момент вам может понадобиться пустая коллекция, например, если вы инициализируете класс, а данные не известны, когда вызывается конструктор.Если вы не назначите пустую коллекцию, другой код может потерпеть неудачу, если он попытается получить доступ к этому полю / свойству и выдаст исключение NullReferenceException.Если данные предоставляются на более позднем этапе, этот код просто заменяет поле новым заполненным экземпляром SynchronizedReaOnlyCollection.

1 голос
/ 28 августа 2010
public SynchronizedReadOnlyCollection();

Инициализирует новую пустую коллекцию, которая будет блокировать внутреннее поле.

public SynchronizedReadOnlyCollection(object syncRoot);

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

public SynchronizedReadOnlyCollection(object syncRoot, IEnumerable<T> list);

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

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

...