关于DEPHI的接口问题(100分)

  • 主题发起人 主题发起人 zhenqiang
  • 开始时间 开始时间
Z

zhenqiang

Unregistered / Unconfirmed
GUEST, unregistred user!
有那位能够清楚的解释一下在DEPHI里面接口的概念,如果有相关的例子最好不过了,小弟在这里送分了!!!
 
这个问题好象太广泛了 看专业的书籍可能会说的比较清楚和全面。
 
怎么没有看见有这方面的专家呢????
 
怎么没有这方面的高手呀??
 
李维的<<面向对象的编程思想>>一书中讲的十分详细.
 
兄弟,找本书的配套光盘里面应该有。
 
接口Interface,好多地方都有,不同理解
 
建议读读李维的<<Inside VCL>>,那里面有专门的一章内容介绍接口的,很详细的。
 
接口可以生存期自管理。
可以实现抽象类的功能,给delphi提供类似多重继承的能力。
。。。。。
我给你一个关于接口的列子,摘自刘艺的《delphi面向对象编程思想》,他的这本书对接口有很详细的介绍。你可以看看。在这里我也可以把他书上有关于接口的demo发给你。
代码:
unit mtReaper;

interface
type
  ImtReaper=interface
    ['{F3E97960-3F35-11D7-B847-001060806215}']
  end;
  
  TmtReaper=class(TInterfacedObject,ImtReaper)
  private
    FObject:TObject;
  public
    constructor Create(AObject:TObject);
    destructor Destroy;override;
  end;

implementation

uses SysUtils;

constructor TmtReaper.create(AObject:TObject);
begin
  FObject:=AObject;
end;

destructor TmtReaper.Destroy;
begin
  FreeAndNil(FObject);
  Inherited;
end;

end.

unit frmMain;

interface

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

type
  TNoisyDeath = class(TObject)
  public
    destructor Destroy;override;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    procedure WaitAWhile;
  public
    { Public declarations }
  end;



var
  Form1: TForm1;

implementation
uses mtReaper;
{$R *.dfm}
destructor TNoisyDeath.Destroy;
begin
  showMessage('对象销毁了!');
  inherited;
end;

procedure TForm1.WaitAWhile;
var i:Integer;
begin
  for i :=0  to 5000  do
  begin
    caption:=Inttostr(i);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var NoisyDeath:TNoisyDeath;
begin
  NoisyDeath:=TNoisyDeath.create;
  try
    waitAWhile;
  finally
    NoisyDeath.Free;
  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  NoisyDeath:TNoisyDeath;
  girm:ImtReaper;
begin
  NoisyDeath:=TNoisyDeath.create;
  girm:=TmtReaper.Create(NoisyDeath);
  waitAWhile;
end;

end.
 
TO:神舟5号
谢谢你!
但是我想问一下,如果这样做的话,用类就完全可以实现我们所要完成的功能,为什么要用接口呢?类和类之间也可以进行继承的关系,也可以重载,在一般的实现中我真不懂接口有什么大的优点,我在一些资料上看到,在三层,多层分布式中接口是非常有用的,可以解释一下这方面的问题吗?
 
没有人呀?
 
在Delphi中,接口是纯虚类,在C++中,接口就是struct

接口:
[blue]1. 有引用计数,不用关心销毁。
2. 可以跨模块传递。
3. 与具体的实现无关,可以用于对象间解耦合。[/blue]

[red]接口封装了具体的实现。[/red]

对象:
[green]1. 没有引用计数,手动销毁,一旦忘记,内存泄漏。
2. 不能跨模块传递,地址空间不同会出错。
3. 与具体实现有关,对象间增加耦合度。[/green]


不建议看Delphi的书来认识接口,推荐查阅《COM技术内幕》和《设计模式》。
 
crystal,谢谢,相问一下那里这方面的书下载?
 
您可以使用http://www.google.com来查询
 
接口很好用,可以很好地用来封装实现方式,同意crystal的观点.
 
http://www.51delphi.com/delphi/soft?cx=%B2%E5%BC%FE%B9%DC%C0%ED
主页:
插件管理
[内容]
1.概述
插件管理是本控件包的主要功能,至于联合子窗口(joinchildform)是一种可以集成到一个TWINCONTROL的控件中的窗口类,属于本包的附属品,有兴趣者可以自行研究.
本插件模式基本实现了插件的即插即用功能,欢迎大家使用,如果有意见可以发邮件给我,如果有对其做了改进的朋友请发一份改进后的代码给我,方便大家学习交流.
2.安装
先编译PLUGIN.DPK,然后再安装DCLPLUGIN.DPK即可,包是为DELPHI7设计的,使用其他版本的朋友请自行修改相应的包文件即可使用.
3.范例
在范例中我只演示了插件的用法,本插件的技术基于DELPHI的包模式,无法适用于普通的动态连接库.
4.说明
本插件的制作主要是为了我以前所做的共享软件月光宝盒,现在已经更名叫CC,希望有兴趣的朋友和我联系,其中的插件技术就是基于该套控件包.
本包使用于自由软件的开发,如果用来开发商业软件,也无须付费,但是请将其使用目的以及相关软件说明发送邮件给我.
5.作者
我的邮件地址:yangying_2000@163.com
 
后退
顶部