nteger; end; TFooBar = class(TInterfacedObject, IFoo, IBar) //为同名方法取别名 function IFoo.F1 = FooF1; function IBar.F1 = BarF1; //接口方法 function FooF1 : Integer; function BarF1 : Integer;end; function TFooBar.FooF1 : Interger;begin Result := 0;end; function TFooBar.BarF1 : Interger;begin Result := 0;end; 3.implements指示符 implements指示符是在Delphi4中引进的,它的作用是委托另一个类或接口来实现接口的某个方法,这个技术有时又被称为委托实现,关于implements指示符的用法,请看下面的代码: type TSomeClass = class(TInterfacedObject, IFoo) //Stuff function GetFoo : TFoo; property Foo : TFoo read GetFoo implements GetFoo; //Stuff end; 在上面例子中的implements指示符是要求编译器在Foo属性中寻找实现IFoo接口方法。属性的类型必须是一个类,它包含IFoo方法或类型是IFoo的接口或IFoo派生接口。implements指示符后面可以列出几个接口,彼此用逗号隔开。 implements指示符在开发中提供了两个好处:首先,它允许以无冲突的方式进行接口聚合。聚合 (Aggregation)是COM中的概念。它的作用是把多个类合在一起共同完成一个任务。其次,它能够延后占用实现接口所需的资源,直到确实需要资源。例如,假设实现一个接口需要分配一个1MB的位图,但这个接口很少用到。因此,可能平时你不想实现这个接口,因为它太耗费资源了,用implements指示符后,可以只在属性被访问时才创建一个类来实现接口。 4.使用接口 当在应用
程序中使用接口类型的变量时,要用到一些重要的语法规则。最需要记住的是,一个接口是生存期自管理类型的,这意味着,它通常被初始化为nil,它是引用计数的,当获得一个接口时自动增加一个引用计数;当它离开作用域或赋值为nil时它被自动释放。下面的代码演示了一个接口变量的生存期自管理机制。 var I : ISomeInterface;begin //I被初始化为nil I := FunctionReturningAnInterface; //I的引用计数加1 I.SomeFunc; //I的引用计数减1,如果为0,则自动释放。 end; 关于接口变量的另一个规则是,一个接口变量与实现这个接口的类是赋值相容的,例如,下面的代码是合法的: procedure Test(FB : TFooBar)var F : IFoo;begin F :=FB; //合法,因为FB支持IFoo 最后,类型强制转换运算符as可以把一个接口类型的变量强制类型转换为另一种接口。示例如下: var FB : TFooBar; F : IFoo; B : IBar;begin FB := TFooBar.create; F :=FB; //合法,因为FB支持IFoo B := F as IBar; //把F转换为IBar