某些时候,让不相关的类分享一组公有成员,以便产生相同的行为,是非常有用的。一
个最基本的方法可能是通过一个公共的基类来定义它们,但这种方法太受局限,因为它要
求这些类通过继承而互相关联,另外,它们也许还有着各自的基类,且 CLI 类型只支持单
一类继承。
C++/CLI 提供了一种方法,可利用多个类实现一组通用的功能,这就是我们通称的"接
口",而一个接口则是一组成员函数的声明。要注意,这些函数只是声明,没有定义,也就
是说,一个接口定义了一个由抽象函数组成的类型--这些函数实际上是纯虚函数,且在适
当的时候,这些函数由客户类来实现。一个接口可允许不相关的类用同一名称和类型,实
现同一功能,而无须要求这些类分享公共基类。在例 1 中演示了怎样定义一个接口。
例 1:
using namespace System;
public interface class ICollection
{
void Put(Object^ o); //隐式 public abstract
Object^ Get(); //隐式 public abstract
};
一个接口的定义看上去非常像一个类,除了用 interface 取代了 ref 或 value,所有的
函数都没有函数体,且均隐式为 public 和 abstract。按照通常的约定,一个接口名带有起始
字母 I,后再接一个大写字母。(接口类与接口结构是等价的。)与类相似,一个接口也能
有 public 或 private 访问可见性。
一个接口能有一个或多个"基接口",在这种情况下,它将继承这些接口中的所有抽象
函数,例如,在例 2 中,接口 I2 显式继承自 I1,而 I3 显式继承自 I1 与 I2,并通过 I2 隐式
继承自 I1。
例 2:
interface class I1 { /* ... */ };
interface class I2 : I1 { /* ... */ };
interface class I3 : I1, I2 { /* ... */ };
一个类可像从基类继承时那样,来实现一个接口,见例 3。
例 3:
public ref class List : ICollection
{
public:
void Put(Object^ o)
评论0
最新资源