c# - 混淆为什么接口(interface)在基接口(interface)已经继承的情况下又被继承了

标签 c# oop interface

我正在审查继承,对继承接口(interface)有些困惑。让我们以List<T>为例.

我有这个基本声明:

List<string> categoryList = new List<string>();

当我点击 Go to Definition当光标在 List 上时,它向我展示了这段代码,

public class List<T> : IList<T>, ICollection<T>, IList, ICollection, 
                       IReadOnlyList<T>, IReadOnlyCollection<T>, 
                       IEnumerable<T>, IEnumerable
{

}

如果我点击 Go to Definition当光标位于 IList<T> 上时再次

public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
{

}

现在我的问题是:为什么 List<T>还在继承ICollection<T> , IEnumerable<T>IEnumerable什么时候IList<T>已经继承了吗?

最佳答案

我相信这正是 Visual Studio 表示定义的方式,它向您展示了整个界面层次结构。

如果您查看 Reference Source for List<T> ,您会看到它只实现了 IListSystem.Collections.IListIReadOnlyList,作为实现 IEnumerable 将是多余的。

public class List<T> : IList<T>, System.Collections.IList, IReadOnlyList<T>
{
    // bla bla bla
}

关于c# - 混淆为什么接口(interface)在基接口(interface)已经继承的情况下又被继承了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336884/

相关文章:

c# - 如何初始化一个接口(interface)?

java - 引用类型和对象类型之间的区别?

c# - 仅在 float[] 样本数组的末尾删除或修剪零 0

c# - 我如何从 Azure RoleEntryPoint 进行报告,无论其是否正在运行

delphi - 为什么当我尝试实现接口(interface)时收到 "Invalid pointer operation"?

c# - 为什么代码从 ClassB 调用 Get()?

python - 有条件地定义属性(使用装饰器)(例如 try/except?)

c# - 将 byte[] 填充为 AES 加密的 16 字节倍数

c# - 取消 DataAdapter.Fill()

java - 子类中是否存在父类(super class)构造函数(但不被继承)?