为什么会在基类及其子类的定义中实现同一个接口

stg609 2012-07-13 06:51:56
拿最常用的List<T>来说吧,可以看到List<T>的定义为

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


看到它实现了一大堆的接口,如果你再看下IEnumerable<T>的定义,会发现IEnumerable<T>也继承了ICollection<T>, 那么为何微软在定义List<T>的时候还需要再多写一个ICollection<T>呢?

除了这个例子外,还有很多项目中也见过类似的,比如在asp.net mvc的一个教程中http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

上面的链接中可以看到作者先定义了一个接口IStudentRepository ,继承自IDisposable, 然后在写了个类来实现这个IStudentRepository, 但除了实现该接口外,还实现了IDisposable, 请问这是不是多此一举?

对此,我一直不理解,向大家请教!
...全文
163 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
比如所你定义了类a,它实现了接口Ix,然后你定义类b从a继承,那么显然,b的对象实例也实现了Ix。

[/Quote]
呵呵,刚看了一下,写反了。接口不具有继承性,是指b对象实例没有实现Ix而言,你需要在b中再次使用Ix。

threenewbee 2012-07-13
  • 打赏
  • 举报
回复
以前和阿非学到的,这里也转给你
http://topic.csdn.net/u/20111014/12/f62f7f56-c020-4eab-a975-19b64230d318.html
stg609 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
......

微软的.net是模仿java而来的。而java的interface是不支持继承的,因此你必须在子类中重新定义接口!
[/Quote]

谢谢。 sp大哥,你后面的两条补充回复是基于“java的interface不支持继承”这一点的,对吧?
那既然现在C#是支持接口的继承的,抛开wddw1986回复中所提到的“是为了让使用者可以看得清楚”,那我是否可以认为基于现在C#的能力下,我可以在子类的定义中重复写上同一个接口?
也就是下列写法是正确的?

public interface IA
{
//...
}

public interface IB: IA
{
//...
}

public class C: IB //<---- 省略 IA
{
//....
}
  • 打赏
  • 举报
回复
因此你必须在子类中重新定义接口 --> 因此你必须在使用子interface的类型中重新定义使用此inteface接口
  • 打赏
  • 举报
回复
比如所你定义了类a,它实现了接口Ix,然后你定义类b从a继承,那么显然,b的对象实例也实现了Ix。

但是这对于接口根本不成立。所以如果你过度使用接口,那么你就要承受这种痛苦去一遍遍地实现接口。
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
拿最常用的List<T>来说吧,可以看到List<T>的定义为

C# code

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



看到它实现了一大堆的接口,如果你再看下IEnumerable<T>的定义,会发现I……
[/Quote]

微软的.net是模仿java而来的。而java的interface是不支持继承的,因此你必须在子类中重新定义接口!
cheng2005 2012-07-13
  • 打赏
  • 举报
回复
其实就是为了让使用者可以看得清楚,不然的话你需要一路向上找基类才能找到所有继承的接口,功能仅此而已。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧