review——C# (14)接口
FROM P267
1.
想要调用Array.Sort,必须实现IComparable,并且实现该接口的CompareTo方法 (形式为 int CompareTo(object obj) )
2.声明接口
接口声明不能包含以下成员:
□数据成员
□静态成员
接口声明只能包含如下类型的非静态成员函数的声明
□方法
□属性
□事件
□索引器
并且
□这些函数成员的声明不能包含任何实现代码,而在每个成员声明的主体后必须使用分号。
□按照惯例,接口名称必须从大写的I开始(e.g.ISaveable)
□与类和结构一样,接口声明还可以分隔成分部接口声明
接口的访问性和接口成员的访问性之间有一些重要区别:
□接口声明可以有任何的访问修饰符public、protected、internal或private
□然而,接口的成员是隐式public的,不允许有任何访问修饰符,包括public。
3.接口是引用类型
接口是一个引用类型。我们不能直接通过类对象的成员访问接口。然而,我们可以通过把类对象引用强制转换为接口类型来获取指向接口的引用。一旦有了接口的引用,就可以使用点号来调用接口的方法。
4.接口和as修饰符
使用强制转换运算符可以获取对象接口的,更好的选择是使用as运算符。
□如果类实现了接口,表达式返回指向接口的引用
□如果类没有实现接口,表达式返回null而不是抛出异常
5.实现具有重复成员的接口
如果一个类实现了多个接口,并且其中一些接口有相同签名和返回类型的成员,那么类可以实现单个成员来满足所有包含重复成员的接口。
6.多个接口的引用
通过之前的内容已经知道了接口是引用类型,并且可以通过将对象引用强制转换为接口类型的引用,来获取一个指向接口的引用。如果类实现了多个接口,我们可以获取每一个接口的独立引用。
7.派生成员作为实现
实现接口的类可以从它的基类继承实现的代码。例如,如下的代码演示了类从它的基类代码继承了实现。
8.显示接口成员实现
通过之前提到的,我们已经看到单个类可以实现多个接口需要的所有成员。
但是,如果我们希望为每一个接口分离实现该怎么做呢?在这种情况下,我们可以创建显示接口成员实现。显示接口成员实现有如下特性:
□与所有接口实现相似,位于实现了接口的类或结构中。
□它使用限定接口名称来声明,由接口名称和成员名称以及它们中间的点分隔符号构成
如果有显示接口成员实现,类级别的实现是允许的,但不是必需的。显示实现满足了类或结构必须实现的方法。因此,可以有如下3种实现场景:
□类级别实现
□显式接口成员实现
□类级别和显式接口成员实现
其中显式接口成员实现只可以通过指向接口的引用来访问。即,其他的类成员都不可以直接访问它们。(包括派生类本身)
这个限制对继承产生了重要的影响。由于其他类成员不能直接访问显式接口成员实现,衍生类的成员也不能直接访问它们。它们必须总是通过接口的引用来访问。
9.接口可以继承接口
之前我们已经知道接口实现可以从基类被继承(本文第7小节),而接口本身也可以从一个或多个接口继承。
□要指定某个接口继承其他的接口,应在接口声明中把基接口以逗号分隔的列表形式放在接口名称的冒号之后,如下所示:
□与类在基类列表中只能有一个类名不同,接口可以在基接口列表中有任意多个接口。
--列表中的接口本身可以继承其他接口。
--结果接口包含它声明的所有接口和所有基接口的成员。