第十三章 接口
13.2 定义接口
C#禁止接口定义任何一种静态成员。
根据约定,接口类型名字要以大写字母I开头,目的是方便在源代码中辨认接口类型。
接口继承可以看成是其他接口的契约包括到一个接口中。
13.3 继承接口
C#编译器要求将用于一个接口的方法标记为public。
13.5 隐式和显式接口方法实现
在C#中定义一个显式接口方法时,不允许指定可访问性(比如public或private)。但是编译器生成方法的元数据时,其可访问性被自动设为false,防止其他代码在使用类的实例时直接调用接口方法。要调用接口方法,只能通过接口类型的一个变量来进行。
一个现实接口方法不能被标记为virtual,所以它不能被重写。
13.6 泛型接口
首先,泛型接口提供了出色的编译时类型安全性。
第二,处理值类型时,装箱次数会少很多。
第三,类可以实现同一个接口若干次,只要每次使用不同的类型参数。
13.11 设计:基类还是接口
IS-A vs. CAN-DO关系 类型只能继承一个实现。如果派生类型不具有与基类型的IS-A关系,就不应使用基类,而应使用接口。接口意味着CAN-DO的关系。如果多种对象类型都具有CAN-DO功能,就应该使用接口。