110,534
社区成员
发帖
与我相关
我的任务
分享
public interface XEnumerable
{
void enm();
}
public interface XCollection: XEnumerable
{
void a();
}
public interface XList: XCollection
{
}
public class A : XList
{
public void a()
{
throw new NotImplementedException();
}
public void enm()
{
throw new NotImplementedException();
}
}
如果你编译之后,调用XList x = new A();
x.enm();
就会发现完全可以编译和执行。但是看看编译之后的dll结果,你会发现实际上编译出来的代码是public interface XList : XCollection, XEnumerable
{
}
也就是说,c#语言的“语法糖”给你混沌了这里的代码问题,补齐了这里在XList 接口定义上的问题。
从理论上解释,实际上接口是不支持继承的。也就是说,如果 IList不实现 IEnumerable,那么它就没有这个接口。这跟class支持继承是完全不同的。
class支持继承,而Interface并不支持继承。但是c#语言的编译器给你用障眼法,帮你补上了自定义Interface代码中的漏洞。