你的位置:首页 > ASP.net教程

[ASP.net教程]【C#进阶系列】12 接口


C#不支持类的多继承,然而却可以继承多个接口。简单的就不说了,来看看下面的例子:

 public interface IRead {  string GetText(); } public interface IWrite {  string GetText(); }  

对于上面的这种情况,如果一个类同时继承上面两个接口,那么如何去实现这两个名字相同的方法呢?

显示接口方法(EIMI)

public class MyCpu:IRead,IWrite {   string IRead.GetText() {     return "这个方法实现IRead的方法";   }   string IWrite.GetText()   {     return "这个方法实现IWrite的方法";   }   public string GetText()   {     return "这个方法实现自己独有的方法";   }}

如上图,只需要在方法前面加上接口名即可。然而显示接口方法只能是私有方法。

然而这种方法要慎用,因为使用了这种方法后,值类型的实例在转换成接口时会发生装箱。因为是私有的,所以也不能被派生类调用。

最重要的是显示接口方法的调用很奇葩:

var cpu = new MyCpu();Console.WriteLine(cpu.GetText());Console.WriteLine(((IRead)cpu).GetText());IWrite b = cpu;Console.WriteLine(b.GetText());Console.ReadLine();

必须先转一道再调用,会让使用的人很困惑。

用基类还是用接口

  • 基类更多的是一个身份上的事,比如鸟是燕子的基类。而接口是一个行为上的事,比如鸟和飞机都能飞,那么飞就是一个接口。
  • 基类可以为派生类提供良好的默认实现。
  • 基类添加一个方法,派生类自动就可以继承。而接口添加一个方法,派生类还需要重写。

然而我认为实际上仅仅用第一个来判断就好了,因为它更偏向于基于实际业务去考虑到底用基类还是接口。