为什么IDictionary <tkey,tvalue =“”>实现了ICollection和IEnumerable

时间:2018-05-04 08:35:54

标签: c# interface implementation

我正在查看为IDictionary<TKey, TValue>界面生成的元数据,我注意到它实现了

public interface IDictionary<TKey, TValue> : ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable

这不是多余的吗?查看ICollection<T>的元数据,表明它已经实现了IEnumerable<T>, IEnumerable

为什么IEnumerable<T>展示IEnumerable,而ICollection<T>没有实现ICollection

2 个答案:

答案 0 :(得分:4)

元数据显示所有已实现的接口,尤其是通过继承获得的接口。如果您查看IDictionary<TKey, TValue>的{​​{3}},您会发现实际的实现只实现了ICollection<KeyValuePair<TKey, TValue>>

public interface IDictionary<TKey, TValue> : ICollection<KeyValuePair<TKey, TValue>>

答案 1 :(得分:0)

阅读this。它解释了您想要了解的关于第一个问题的所有信息。

我引用最相关的部分:

  

为什么像Reflector或对象浏览器这样的工具会显示整个列表?

     

这些工具没有源代码。他们只有元数据   从中工作。由于输入完整列表是可选的,因此该工具没有   了解原始源代码是否包含完整列表。   最好在更多信息方面犯错误。再次,该工具   正试图通过向您展示更多信息来帮助您而非   隐藏您可能需要的信息