【C#进阶系列】13 接口

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();

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

用基类还是用接口

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

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

上一篇:阿里云API网关(12)为员工创建子账号,实现分权管理API:使用RAM管理API


下一篇:[Ubuntu] ubuntu10.04系统维护之Wine的安装