为什么ICollection已经是继承于IEnumerable的了,IList 还要从 ICollection, IEnumerable 继承?

问题描述

IList:ICollection不就都包含了吗?

解决方案

解决方案二:
为了让你看的更加明白,更为清楚需要实现哪些功能
解决方案三:
记得前段时间也有人问这个问题来着找了一下不知道帖子到哪里去了。。如果只写IList那么你就只知道有一个接口IList而不知道IList又是从哪里来的。。
解决方案四:
那是因为你用的反编译工具看dll才会出现这个问题真正的源代码根本就没写这么多
解决方案五:
引用3楼shingoscar的回复:

那是因为你用的反编译工具看dll才会出现这个问题真正的源代码根本就没写这么多

貌似我电脑有装.NetReflector
解决方案六:
抽象成员必须有内容……说白了假设有一个孩子是C,这个孩子继承了父亲(A)和母亲(B)的一些特性,那你应该不光知道哪些谁他自己的特性,还要知道他爸妈的特性才可以,否则你不验证他父母的特性,结果发现C其实是父亲和D的私生子……那岂不是以后会很麻烦?C#在这里处理的比较严苛,相当于“证明C妈是C妈,且C爸是C爸”的这个过程,你要有父亲(A)的信息,也要有母亲(B)的信息,否则不通过审批,不承认C的户籍——他就不能被处理了……
解决方案七:
直接网上看源代码
解决方案八:
#3楼的说明是对的。我换个角度再来举一个例子:比如说你可以写代码publicinterfaceXEnumerable{voidenm();}publicinterfaceXCollection:XEnumerable{voida();}publicinterfaceXList:XCollection{}publicclassA:XList{publicvoida(){thrownewNotImplementedException();}publicvoidenm(){thrownewNotImplementedException();}}

如果你编译之后,调用XListx=newA();x.enm();

就会发现完全可以编译和执行。但是看看编译之后的dll结果,你会发现实际上编译出来的代码是publicinterfaceXList:XCollection,XEnumerable{}

也就是说,c#语言的“语法糖”给你混沌了这里的代码问题,补齐了这里在XList接口定义上的问题。从理论上解释,实际上接口是不支持继承的。也就是说,如果IList不实现IEnumerable,那么它就没有这个接口。这跟class支持继承是完全不同的。class支持继承,而Interface并不支持继承。但是c#语言的编译器给你用障眼法,帮你补上了自定义Interface代码中的漏洞。
解决方案九:
换成一个“定理式”的语言来说吧:.net中的接口并不支持继承,但是c#语言中的接口支持继承。靠的是c#编译器的语法糖。
解决方案十:
这里可以强化这样的概念:.netframework跟c#、vb.net,是不一样的,这中差别是历史和系统进化的必然,在描述编程问题中不要混乱地使用它们。

时间: 2024-10-28 16:57:56

为什么ICollection已经是继承于IEnumerable的了,IList 还要从 ICollection, IEnumerable 继承?的相关文章

请问 java 继承的作用和意义是什么? 如果不用继承实现这个程序的话是否可以呢?

问题描述 请问 java 继承的作用和意义是什么? 如果不用继承实现这个程序的话是否可以呢? 请问 java 继承的作用和意义是什么? 如果不用继承实现这个程序的话是否可以呢? 解决方案 继承的用处在于,你可以在派生类中通过重写某些方法,实现对现有代码的自定义. 如果没有继承,你想利用现有的代码,你只有两个办法: - 直接在原有的代码上修改,那么你不知道你的修改会不会对使用这个类的别的代码造成什么影响 - 把原有代码拷贝一份,并且修改,这样原来的代码的作者想修正一个bug,你的代码没办法被更新,

关于WPF属性值继承。有些元素的属性值,是阻止继承的,有没有办法,可以使得继承下去?

问题描述 1.并不是所有的依赖属性值都会参与属性值的继承(并不多见)2.有些元素有一些优先级更高的源来设置他的哪些属性值,如:StatusBar,Menu,ToolTip,等元素内部的字体属性设置为当前系统属性设置,这里就是传说中的元素把所有要继承的属性继承"吞噬",他会阻止属性沿着元素树向下继承.有没有办法解决? 解决方案 解决方案二:http://www.cnblogs.com/KnightsWarrior/archive/2010/08/27/1809739.html看看这篇文章

关于接口继承问题!谁能给我举一个多接口继承的实例呀?

问题描述 为了避免看混,让我用中文变量名吧!interface接口a{a();}interface接口b{b();}classc:接口a{//etc}classc:接口b{//etc}这样,类C实例就可以使用方法a()和方法b()吗(我知道这两个个方法需要在类c中重写)?这样写正确吗?还有一个疑问,那么类c的派生类d,也可以使用a()和b()吗? 解决方案 解决方案二:classc:接口a,接口b{}解决方案三:楼上正解...我知道这两个个方法需要在类c中重写--------那不叫重写(over

接口继承的声明问题

某天,小新问我这样一个问题: 类System.Collections.CollectionBase是从IList.ICollection继承而来,IList是从ICollection和IEnumerable继承而来,那CollectionBase为什么还要从ICollection继承呢? 我们先来看看这些类和接口在MSDN文档中的声明: public interface IEnumerable public interface ICollection : IEnumerable public i

实现IEnumerable的时候,是不是可以只实现一个GetEnumerator函数? GetNext需要吗?

问题描述 如题,我如果像下面这样来继承IEnumerable接口,返回一个成员的IEnumerable接口是可以工作,但是问题是,这个IEnumerable在被调用者访问的时候,内部是是调用的GetNext对吧.这个GetNext函数如果是个虚函数的话,是不是调用的是M类的GetNext函数,而不是Dictionary<string,int>的GetNext函数?我感觉应该是调用M类型的GetNext函数,因为是多态调用,对吧.那么我是不是应该重载GetNext函数和HasNext函数?cla

Contoso 大学 - 8 – 实现继承

原文 Contoso 大学 - 8 – 实现继承 By Tom Dykstra, Tom Dykstra is a Senior Programming Writer on Microsoft's Web Platform & Tools Content Team. 原文地址:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-fra

091118 T 数组的继承

Array T[] IList IList<T>它们之间的关系如下T[] : Array, IList<T>, ICollection<T>, IEnumerable<T>       --这层的关系比较隐含Array : ICloneable, IList, ICollection, IEnumerable 如下:typeof(string[]).GetInterfaces()结果:{System.Type[7]}    [0]: {Name = &quo

JAVA 【引用类型】和【对象类型】在【继承】中的异同

介绍     JAVA [引用类型]和[对象类型]在[继承]中的异同,这个问题自己整理过N次,也被人当菜鸟问过N次.所以,在此简单整理一下,以供大家分享. 在继承关系中,一般成员变量是根据引用类型 在继承关系中,静态成员变量是根据引用类型 在继承关系中,一般方法是根据对象类型 在继承关系中,静态方法是根据引用类型 注意     静态成员变量,静态方法是基于类的,本文为了测试观察,所以,会用对象去引用静态成员变量和静态方法.      Super Class: package shuai.stud

如何用语句去实现多层继承

问题描述 如何用语句去实现多层继承 Person类,有Student类和Employee类继承Person, 而Employee类又被教员类Teacher类和职员类Staff类继承. 每个人都有姓名.地址.电话号码和电子邮件地址. 学生有年级状态(大一到大四). 雇员有办公室(office).工资(salary)和受聘日期(dateOfEmployee). 教员有办公时间(wordTime)和级别(level). 职员有职位(job). 覆盖每个类的toString()方法,显示相应的类名和人名