zoukankan      html  css  js  c++  java
  • 【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();

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

    用基类还是用接口

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

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

  • 相关阅读:
    hdu 4396(spfs/二维最短路)
    hdu 4360(最短路变形)
    hdu 3501(欧拉函数的应用)
    bnu 4359(数位dp)
    用Hermite插值方法估计积分值
    虞旦盛老师 的《数学分析续》课件
    数值积分中的梯形法则
    数值积分中的梯形法则
    辛普森三八律
    利用自然数的标准分解证明可数集合的所有有限子集形成的集合是可数集
  • 原文地址:https://www.cnblogs.com/vvjiang/p/5299551.html
Copyright © 2011-2022 走看看