混淆为什么在基接口已经继承接口时再次继承接口

时间:2014-08-16 04:17:12

标签: c# oop 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>仍在继承IEnumerableIList<T>和{{1}}?

2 个答案:

答案 0 :(得分:3)

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

如果您查看Reference Source for List<T>,您会看到它只实现 IList&lt; T&gt; System.Collections.IList IReadOnlyList&lt; T&gt; ,因为实现 IEnumerable&lt; T&gt; 将是多余的。

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

答案 1 :(得分:3)

出于可读性目的,这显然是。只需指定三个接口,代码就可以正常编译:

public class List<T> : IList<T>, IList, IReadOnlyList<T>
{

}

但是这样,您必须知道IList继承ICollectionIEnumerableIList<T>实施ICollection<T>IEnumerable<T>IReadOnlyList<T>继承IReadOnlyCollection<T>