网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> Delphi编程 >> 文章正文
  Dlephi中关于接口方法的使用            【字体:
Dlephi中关于接口方法的使用
作者:佚名    文章来源:不详    点击数:    更新时间:2007-9-12    
正在装载数据……

-------接口单元文件UMyInterface.pas----------------- 
unit UMyInterface;

interface

uses Dialogs;

type
 //根接口
 ImyInterface = interface
 ['{70C1ACCA-9494-43B2-BE37-B7680C4F2543}']
    procedure getBaseMethod;
 end;

  //子接口
   IfirstInterface = interface(ImyInterface)
   ['{A340131E-DA63-4D22-B634-9D4847F23934}']
      procedure getChildMethod;
   end;

  //根接口基类
   baseClass = class(Tobject)
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
   end;

   //用于实现根接口中方法
   firstImp = class(baseClass,ImyInterface)
     procedure getBaseMethod;

  end;

   TImplClass = class(firstImp,IfirstInterface)
     procedure getChildMethod;

  end;

implementation

 

{ baseClass }

function baseClass._AddRef: Integer;
begin
   result := 1;
end;

function baseClass._Release: Integer;
begin
    result := 1;
end;

function baseClass.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
 if GetInterface(IID, Obj) then
    Result := 0
  else
    Result := E_NOINTERFACE;
end;


{ firstImp }

procedure firstImp.getBaseMethod;
begin
  showmessage('调用实现父接口方法');
end;

{ TImplClass }

procedure TImplClass.getChildMethod;
begin
  showmessage('调用实现自己接口方法');
end;

end.

----------测试窗体单元文件Ftest.pas----------
unit Ftest;

interface

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

type
  TFinteface = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  // 使用对象接口委托,充当适配器功能
  Ttest = class(Tobject,Ifirstinterface)
  private
    FImplService: Ifirstinterface;
  public
    Constructor Create;overload;
    Destructor Destroy;override;
    Constructor Create(aClass: TClass);overload;
    property MyService: Ifirstinterface read FImplService implements Ifirstinterface;
  end;
   //------模块插口1
   // 委托父类实现父接口方法 (getBaseMethod)
  studentImp = class(firstImp,Ifirstinterface)
     procedure getChildMethod;
  end;

  //封装一个学生类
  studentBean = class (studentImp)
    private name: String;
    public
      constructor Create(name: String);
      destructor Destroy; override;
      procedure setName(name: String);
      function getName: String;
    //  property name:String read getName write setName;
   end;

var
  Finteface: TFinteface;

implementation


{$R *.dfm}

{ studentBean }

constructor studentBean.Create(name: String);
begin
 self.name := name;
end;

destructor studentBean.Destroy;
begin
  self.Free;
  inherited;
end;

function studentBean.getName: String;
begin
  result := self.name;
end;

procedure studentBean.setName(name: String);
begin
  self.name := name;
end;

{ studentImp }

procedure studentImp.getChildMethod;
begin
  showmessage('调用学生自己接口方法');
end;

procedure TFinteface.BitBtn1Click(Sender: TObject);
var
  a : studentBean;
begin
  a := studentBean.Create('学生小张');
  showmessage(a.getName);
  a.setName('学生小王');
  showmessage(a.getName);
  a.getBaseMethod;   //调用父接口方法
  a.getChildMethod;   //调用自己接口方法
end;

{ test }

constructor Ttest.Create;
begin
  FImplService :=  TImplClass.Create;
end;

//充当适配器功能,由其他类实现Ifirstinterface中方法
constructor Ttest.Create(aClass: TClass);
var
  Instance: TImplClass;
begin
  Instance := TImplClass(aClass.NewInstance);
  FImplService := Instance.Create;
end;

destructor Ttest.Destroy;
begin
  FImplService := nil;
  inherited;
end;

procedure TFinteface.BitBtn2Click(Sender: TObject);
var
 aobj: Ttest;  //定义实现Ifirstinterface的类
 intf: Ifirstinterface;
begin
 //创建委托对象,委托类TImplClass实现Ifirstinterface方法
  aobj := Ttest.Create(TImplClass);
try
  intf := aobj;
  intf.getChildMethod;
 finally
   intf := nil;
   FreeAndNil(aobj);
  end;
end;

end.

 

 




本文来源:http://blog.csdn.net/eastyell/archive/2007/09/05/1772946.aspx
站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     在delphi中使用xml文档有…
     初探delphi 7 中的插件编…
     delphi 2006(dexter) & …
     获得windows的版本信息。
     “序列号输入助手”源代…
     rs232串口通讯模块
     ado方式下判断数据表是否…
  • HashTable和HashMap; Vecto…

  • 关于java Applet

  • Hashtable 排序

  • Sevrlet 中防止中文乱码策略

  • SPRING+STRUTS+HIBERNATE登录…

  • jmf摄像头applet

  • genexus中对字符串的格式补空…

  • SIP简介,第2部分:SIP SERV…

  • 摘:主题:   using springmo…

  • tomcat下配置jspservletbean…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David