当前位置: 网学 > 编程文档 > DELPHI > 正文

Delphi接口详述

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/07/31

网学网DELPHI编辑为广大网友搜集整理了:Delphi接口详述绩等信息,祝愿广大网友取得需要的信息,参考学习

 

   对于Object Pascal语言来说,最近一段时间最有意义的改进就是从Delphi3开始支持接口(interface),接口定义了能够与一个对象进行交互操作的一组过程和函数。对一个接口进行定义包含两个方面的内容,一方面是实现这个接口,另一方面是定义接口的客户。一个类能实现多个接口,即提供多个让客户用来控制对象的“表现方式”。    正如名字所表现的,一个接口就是对象和客户通信的接口。这个概念像C++中的PUREVIRTUAL类。实现接口的函数和过程是支持这个接口的类的工作。    在这里你将学到接口的语言元素,要想在应用程序中使用接口,请参考COM和ActiveX方面的资料;    1.定义接口    就像所有的Delphi类都派生于TObject一样,所有的接口都派生于一个被称为是IUnknown的接口,IUnknown在system单元中定义如下: IDispatch = interface(IUnknown)  ['{00020400-0000-0000-C000-000000000046}']  function GetTypeInfoCount(out Count: Integer): HResult; stdcall;  function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;  function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;  function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;end;    正如你所看到的,接口的定义就像是类的定义,最根本的不同是在接口中有一个全局唯一标识符(GUID),它对于每一个接口来说是不同的。对IUnknown的定义来自于Microsoft的组件对象模型(COM)规范。    如果你知道怎样创建Delphi的类,那么定义一个定制的接口是一件简单的事情,下面的代码定义了一个新的接口称为IFoo,它包含一个被称为F1()的方法: type  IFoo = Interface   ['{2137BF60-AA33-11D0-A9BF-9A4537A42701}']   function F1 : Integer;  end;    提示在Delphi的IDE中,按Ctrl+Shift+G键可以为一个接口生成一个新的GUID。    下面的代码声明了一个称为IBar的接口,它是从IFoo接口继承来的: type  IFoo = Interface(IFoo)   ['{2137BF61-AA33-11D0-A9BF-9A4537A42701}']   function F2 : Integer;  end; 2.实现接口    下面的代码演示了在一个类TFooBar中怎样实现IFoo和IBar接口: type  TFooBar = class(TInterfacedObject, IFoo, IBar)   function F1 : Integer;   function F2 : Integer;  end; function TFooBar.F1 : Interger;begin  Result := 0;end; function TFooBar.F2 : Interger;begin  Result := 0;end;     注意,一个类可以实现多个接口,只要在声明这个类时依次列出要实现的接口。编译器通过名称来把接口中的方法与实现接口的类中的方法对应起来,如果一个类只是声明要实现某个接口,但并没有具体实现这个接口的方法,编译将出错。    如果一个类要实现多个接口,而这些接口中包含同名的方法,必须把同名的方法另取一个别名,请看下面的程序示例: type  IFoo = Interface   ['{2137BF60-AA33-11D0-A9BF-9A4537A42701}']   function F1 : Integer;  end; type  IBar = Interface   ['{2137BF61-AA33-11D0-A9BF-9A4537A42701}']   function F1 : I

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号