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

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

    用基类还是用接口

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

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

  • 相关阅读:
    不在models.py中的models
    Python多进程编程
    Python多线程编程
    Linux系统的数据写入机制--延迟写入
    Python读写文件你真的了解吗?
    面试 Linux 运维工作至少需要知道哪些知识?
    查找占用资源高的JAVA代码
    CPU的load和使用率傻傻分不清
    Python编写守护进程程序
    由Nginx的DNS缓存导致的访问404
  • 原文地址:https://www.cnblogs.com/vvjiang/p/5299551.html
Copyright © 2020-2023  润新知