如果我有一个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