.net类SynchronizedReadOnlyCollection有4个构造函数。
public SynchronizedReadOnlyCollection();
public SynchronizedReadOnlyCollection(object syncRoot);
public SynchronizedReadOnlyCollection(object syncRoot, IEnumerable<T> list);
public SynchronizedReadOnlyCollection(object syncRoot, params T[] list);
无参数构造函数和仅具有锁对象的构造函数有什么用?如果在创建集合时未填充集合,则集合将始终为空?我错过了什么吗?
答案 0 :(得分:4)
在某些时候,您可能需要一个空集合,例如如果要初始化类,则在调用构造函数时不知道数据。如果您没有分配空集合,则其他代码可能会失败,如果它尝试访问该字段/属性并抛出NullReferenceException。如果数据是在稍后阶段提供的,那么该代码只是用新的,填充的SynchronizedReaOnlyCollection
实例替换该字段。
答案 1 :(得分:1)
public SynchronizedReadOnlyCollection();
初始化一个新的空集合,它将锁定一个内部字段。
public SynchronizedReadOnlyCollection(object syncRoot);
初始化一个新的空集合,它将锁定您提供的对象。
public SynchronizedReadOnlyCollection(object syncRoot, IEnumerable<T> list);
初始化一个新集合,其中包含列表中的元素,这些元素将锁定您提供的对象。
The documentation很好地解释了这一点。值得一读。