如果你查看它的实现,ConcurrentDictionary<K,V>
你会发现它有一个ICollection<KeyValuePair<K,V>.Add(...)
定义为私有的成员。然而,据我理解,接口实现不能标记为私有,而且如果我尝试这样做,编译器也不允许。
这怎么可能呢?
如果你查看它的实现,ConcurrentDictionary<K,V>
你会发现它有一个ICollection<KeyValuePair<K,V>.Add(...)
定义为私有的成员。然而,据我理解,接口实现不能标记为私有,而且如果我尝试这样做,编译器也不允许。
这怎么可能呢?
该方法并非私有方法。源代码显示该类显式实现了
ICollection<T>
、IDictionary<>
和接口,允许调用者在先转换为相应的接口后IDictionary
使用这三个方法中的任何一个。如果没有显式实现接口,这三个接口的方法将相互冲突。Add
Add
正如源代码所示,所有这三种
Add
方法最终都遵循:ConcurrentDictionary
充分利用这两种用例。显式实现允许它实现所有这些接口,并在任何需要IDictionary<TKey,TValue>
或ICollection<KeyValuePair<TKey,TValue>
的地方传递。同时,这可以阻止意外
Add
调用,因为开发人员必须通过强制转换来确认他们确实想要使用这些特定的方法,而不是TryAdd
处理任何异常