如果我有一個ConcurrentDictionary
並希望使用Add()
功能,我需要轉換爲IDictionary
:爲什麼我需要從ConcurrentDictionary轉換爲IDictionary才能使用Add()?
var cd = new ConcurrentDictionary<int, int>();
cd.Add(1, 1); // Compile error: does not contain a definition for 'Add'
IDictionary<int, int> id = cd;
id.Add(1, 1); // Works
問題ConcurrentDictionary and IDictionary告訴我,那是因爲ConcurrentDictionary
工具IDictionary
明確,使用私有的方法。
我的問題:爲什麼是ConcurrentDictionary
這樣實現的?隱藏使用已實現的界面有什麼好處?
這可能也是因爲'IDictionary.Add'被簡稱爲'如果扔...實施(TryAdd(...)!);',它是如此的微不足道,即使在那些情況下,該對於併發字典是有意義的,調用者仍然可以選擇做同樣的事情,而不必通過「IDictionary」訪問字典。 – hvd