c# 接口继承的问题

.Net技术 码拜 8年前 (2016-09-12) 1364次浏览
问题:
经常看到系统代码中有
ICollection从 IEnumerable派生
IList又从ICollection, IEnumerable派生
既然ICollection已经IEnumerable派生,为什么IList需要指出从IEnumerable派生?
如下代码,Person1和Person2的区别是Person2从IName继承,而Person1没有
这两种写法有什么不同?

using System;
namespace MyTest
{
    interface IName
    {
        String GetName();
    }
    interface IPerson: IName
    {
        String GetSex();
    }
    class Person1 : IPerson
    {
        public String GetSex()
        {
            throw new NotImplementedException();
        }
        public String GetName()
        {
            throw new NotImplementedException();
        }
    }
    class Person2 : IPerson, IName
    {
        public String GetSex()
        {
            throw new NotImplementedException();
        }
        public String GetName()
        {
            throw new NotImplementedException();
        }
    }
}
解决方案

40

现在问本人“接口能否支持继承”?本人觉得这放在不同场景下就会有不同回答。其实编译器“好心好意”,但是把问题复杂化了。
很显然,底层.net 并没有什么改变,仍然不支持接口继承
但是c#编译器做出了“代码生成”方面的改变,硬要让一些程序员从一开始在脑子里就认为接口是支持继承的。本人相信vb.net 等语言的编译器肯定也同步实现了这个功能。
那么以后的 .net 底层到底是继续不支持接口继承,还是直接支持接口继承(从而现在编译出来的dll、.exe的汇编代码又变成含有多余的东西的代码了)呢?
原理是很清晰地,但是现实是光怪陆离的,要不断依据人们的需求而改变,并不能永远保证任何是非成败的判断。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c# 接口继承的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)