WEB开发网
开发学院软件开发Delphi Delphi接口详述 阅读

Delphi接口详述

 2010-12-06 07:17:59 来源:WEB开发网   
核心提示:type IFoo = Interface ['{2137BF60-AA33-11D0-A9BF-9A4537A42701}'] function F1 : Integer; end;type IBar = Interface ['{2137BF61-AA33-11D0-A9BF-9


type
  IFoo = Interface
   ['{2137BF60-AA33-11D0-A9BF-9A4537A42701}']
   function F1 : Integer;
  end;

type
  IBar = Interface
   ['{2137BF61-AA33-11D0-A9BF-9A4537A42701}']
   function F1 : Integer;
  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
  .
  .
  .

Delphi接口的又一疑惑:怎么会自动释构的?

上一页  1 2 

Tags:Delphi 接口 详述

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接