当基接口已经继承了接口时,为什么又继承了它?
本文关键字:继承 接口 为什么 | 更新日期: 2023-09-27 18:18:18
我正在回顾继承,对继承接口有一些困惑。以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
{
}
如果光标在IList<T>
上,我再次点击Go to Definition
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
{
}
现在我的问题是:为什么IList<T>
已经继承了ICollection<T>
、IEnumerable<T>
和IEnumerable
, List<T>
还在继承?
我相信这就是Visual Studio表示定义的方式,它向您展示了整个接口层次。
如果您查看List
public class List<T> : IList<T>, System.Collections.IList, IReadOnlyList<T>
{
// bla bla bla
}
这显然是出于可读性的考虑。只要指定三个接口,代码就可以很好地编译:
public class List<T> : IList<T>, IList, IReadOnlyList<T>
{
}
但是这样,你必须知道,IList
继承了ICollection
和IEnumerable
, IList<T>
实现了ICollection<T>
和IEnumerable<T>
, IReadOnlyList<T>
继承了IReadOnlyCollection<T>
。