Se você observar a implementação de , ConcurrentDictionary<K,V>
verá que há um ICollection<KeyValuePair<K,V>.Add(...)
membro definido como privado. No entanto, entendo que não é possível marcar uma implementação de interface como privada e, se eu tentar fazer o mesmo, o compilador não me permite.
Como isso é possível?
O método não é privado. O código-fonte mostra que a classe implementa as interfaces
ICollection<T>
,IDictionary<>
eIDictionary
explicitamente, permitindo que os chamadores usem qualquer um dos trêsAdd
métodos após a primeira conversão para a interface apropriada. Sem a implementação explícita da interface, osAdd
métodos das três interfaces entrariam em conflito entre si.Como o código fonte mostra, todos os três
Add
métodos eventualmente são adiados para:ConcurrentDictionary
aproveita ambos os casos de uso. A implementação explícita permite implementar todas essas interfaces e passá-las em qualquer lugar onde umIDictionary<TKey,TValue>
ouICollection<KeyValuePair<TKey,TValue>
seja esperado.Ao mesmo tempo, isso atua como um bloqueador para
Add
chamadas acidentais porque os desenvolvedores têm que reconhecer por meio da conversão que eles realmente querem usar esses métodos específicos em vez deTryAdd
lidar com quaisquer exceções