C#,SynchronizedReadOnlyCollection及其构造函数

时间:2010-08-28 17:57:30

标签: c# readonly-collection

.net类SynchronizedReadOnlyCollection有4个构造函数。

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

无参数构造函数和仅具有锁对象的构造函数有什么用?如果在创建集合时未填充集合,则集合将始终为空?我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

在某些时候,您可能需要一个空集合,例如如果要初始化类,则在调用构造函数时不知道数据。如果您没有分配空集合,则其他代码可能会失败,如果它尝试访问该字段/属性并抛出NullReferenceException。如果数据是在稍后阶段提供的,那么该代码只是用新的,填充的SynchronizedReaOnlyCollection实例替换该字段。

答案 1 :(得分:1)

public SynchronizedReadOnlyCollection();

初始化一个新的空集合,它将锁定一个内部字段。

public SynchronizedReadOnlyCollection(object syncRoot);

初始化一个新的空集合,它将锁定您提供的对象。

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

初始化一个新集合,其中包含列表中的元素,这些元素将锁定您提供的对象。

The documentation很好地解释了这一点。值得一读。