代码之家  ›  专栏  ›  技术社区  ›  nicecatch petrosmm

为什么IDictionary同时实现ICollection和IEnumerable

  •  3
  • nicecatch petrosmm  · 技术社区  · 7 年前

    我正在查看为生成的元数据 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 虽然 i收集(&L);T> 未实现 ICollection ?

    2 回复  |  直到 7 年前
        1
  •  4
  •   adjan    7 年前

    元数据显示所有实现的接口,尤其是通过继承获得的接口。如果你调查一下 reference source 属于 IDictionary<TKey, TValue> ,您可以看到实际实现仅实现 ICollection<KeyValuePair<TKey, TValue>> :

    public interface IDictionary<TKey, TValue> : ICollection<KeyValuePair<TKey, TValue>>
    
        2
  •  0
  •   InBetween    7 年前

    阅读 this .它解释了你想知道的关于第一个问题的一切。

    我引用了最相关的部分:

    为什么像Reflector或object browser这样的工具会显示整个列表?

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