C# C、 SynchronizedReadOnlyCollection及其构造函数

C# C、 SynchronizedReadOnlyCollection及其构造函数,c#,readonly-collection,C#,Readonly Collection,.net类SynchronizedReadOnlyCollection有4个构造函数 public SynchronizedReadOnlyCollection(); public SynchronizedReadOnlyCollection(object syncRoot); public SynchronizedReadOnlyCollection(object syncRoot, IEnumerable<T> list); public Sync

.net类SynchronizedReadOnlyCollection有4个构造函数

    public SynchronizedReadOnlyCollection();
    public SynchronizedReadOnlyCollection(object syncRoot);
    public SynchronizedReadOnlyCollection(object syncRoot, IEnumerable<T> list);
    public SynchronizedReadOnlyCollection(object syncRoot, params T[] list);
无参数构造函数和只包含lock对象的构造函数有什么用途?如果在创建集合时未填充集合,则集合将始终为空?我错过什么了吗

public SynchronizedReadOnlyCollection();
初始化将锁定内部字段的新空集合

public SynchronizedReadOnlyCollection(object syncRoot);
初始化新的空集合,该集合将锁定您提供的对象

public SynchronizedReadOnlyCollection(object syncRoot, IEnumerable<T> list);
初始化包含列表中元素的新集合,该集合将锁定您提供的对象

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

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

在某些情况下,您可能需要一个空集合,例如,如果您正在初始化一个类,并且调用构造函数时数据未知。如果不分配空集合,则如果其他代码尝试访问该字段/属性并引发NullReferenceException,则可能会失败。如果数据是在以后的阶段提供的,那么该代码只是用一个新的、已填充的SynchronizedReagonlyCollection实例替换该字段。

所以用户非常友好!:+1因为没有实际使用短语RTFM.Meh,并没有解释SROCobject构造函数。它解释了-即使您有一个空集合,您仍然应该使用相同的锁定对象,就像您在其中有元素一样。当然,错误的可能性是不存在的,至少我想不出一个可能的例子,但这种方法更为一致。很好的恢复,但这并不能解释无参数的ctor。如果只需要锁的地方是集合,那么使用内部的ctor是没有问题的。虽然还有一点。。。为什么要在只读集合中使用锁?如果将其与SynchronizedCollection进行比较,则这些CTOR完全相同,因此可能存在这些CTOR来镜像该类。访问集合中的元素无论如何都应该是原子的,因此锁定对象在只读集合中没有意义。嗯,我不完全相信,但我要感谢你认真对待这个问题。你是对的,没有意义。与字符串平行。空提供了部分答案。