问题描述
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,是不一样的,这中差别是历史和系统进化的必然,在描述编程问题中不要混乱地使用它们。