Delphi知识中心
www.delphi.ee
提供Delphi技术知识
与Delphi程序员共同进步


在线服务QQ:99923144 随时恭候您的光临
首页 基础知识 WIN系统 组件使用 组件开发 数据库 ACTIVEX 多媒体技术 网络技术 关于
文章类别:ACTIVEX    你尚未登陆,会员功能无法使用,请从 网站首页 登陆。
  Delphi接口开发教程(3)  
 
Delphi接口开发教程(3) – 关于接口的释放

  代码文件:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
  Button1: TButton;
  Button2: TButton;
  Button3: TButton;
  Button4: TButton;
  procedure Button1Click(Sender: TObject);
  procedure Button2Click(Sender: TObject);
  procedure Button3Click(Sender: TObject);
  procedure Button4Click(Sender: TObject);
 end;

 IMyInterface = interface
  procedure Proc;
 end;

 TMyClass = class(TInterfacedObject, IMyInterface)
 public
  constructor Create;
  destructor Destroy; override;
  procedure Proc;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

constructor TMyClass.Create;
begin
 inherited;
 ShowMessage(‘TMyClass.Create’);
end;

destructor TMyClass.Destroy;
begin
 ShowMessage(‘TMyClass.Destroy’);
 inherited;
end;

procedure TMyClass.Proc;
begin
 ShowMessage(‘IMyInterface.Proc’);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 c: TMyClass;
begin
 c := TMyClass.Create;
 c.Proc;
 c.Free;
 ShowMessage(‘**********’);

{将依次显示:
  TMyClass.Create
  IMyInterface.Proc
  TMyClass.Destroy
  **********
}
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 i: IMyInterface;
begin
 i := TMyClass.Create;
 i.Proc;
 ShowMessage(‘**********’);
 //在本段程序的最后, 编译器能判断出接口不再有用, 会释放掉拥有它的类

{将依次显示:
  TMyClass.Create
  IMyInterface.Proc
  **********
  TMyClass.Destroy
}
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 c: TMyClass;
 i: IMyInterface;
begin
 c := TMyClass.Create;
 i := c;
 //i := IMyInterface(c);  {也可以这样转换}
 //i := c as IMyInterface; {暂时不能使用 as, 接口拥有 GUID 后才可以使用 as 转换}
 i.Proc;
 ShowMessage(‘**********’);

{将依次显示:
  TMyClass.Create
  IMyInterface.Proc
  **********
  TMyClass.Destroy
}
end;

procedure TForm1.Button4Click(Sender: TObject);
var
 i: IMyInterface;
begin
 i := TMyClass.Create;
 i.Proc;
 i := nil; //可以这样主动释放接口; 同时拥有它的类也会释放
 ShowMessage(‘**********’);

{将依次显示:
  TMyClass.Create
  IMyInterface.Proc
  TMyClass.Destroy
  **********
}
end;

end.

 

在线服务QQ:99923144 Delphi程序员QQ群(139442)
Delphi知识中心 www.delphi.ee 最专业的Delphi技术资料网站