Interface & query interface

接口属性:

  • 接口成员不能有修饰符。
  • 接口的真正用途要通过继承接口的派生类中实现。
  • 在派生类中,接口中的类将被重写,实现具体功能。
  • C#不允许多重类继承;
  • 但C#允许多重接口实现;
  • 这意味着一个类可以实现多个接口;

显式接口实现:

  • 由于不同接口中的方法可以重名,因此,在一个类中实现接口的方法时就存在着多义性的问题。对于这类问题,可以显式实现接口中的方法。
  • 显式接口实现的本质是在派生类中重写接口中的方法时,指明被继承的接口名称。
  • 对于显式实现的接口方法,不能通过类的实例进行访问,而必须使用接口的实例进行访问。

接口的切换:(QI:query interface)

  • 由于显式的实现了接口,所以调用函数不能直接通过类的实例来调用接口的方法。
  • 而是必须将句柄传递给接口类型的句柄,并通过接口句柄来调用实例的显式实现的方法。
  • 当需要调用类的不同的接口的方法时,需要切换新的接口句柄以调用其它的方法,这个操作就是query interface
接口的继承
  • 扩展接口:在已有接口的基础上派生新的接口。
  • 组合接口:在已有两个以上接口的基础上派生新的接口。
原文地址:https://www.cnblogs.com/henyihanwobushi/p/2590632.html