delphi 接口--3

1.1 为什么使用接口?
     举个例子好了:有这样一个卖票服务,电影院可以卖票,歌剧院可以卖票,客运站也可以卖票,那么我们是否需要把电影院、、歌
剧院和客运站都设计成一个类架构以提供卖票服务?要知道,连经理人都可以卖票,很显然不适合把经理人也包括到卖票服务的继承架构
中,我们需要的只是一个共通的卖票服务。于是,卖票的服务是个接口,电影院、歌剧院什么的只要都遵循这样一个服务定义就能很好地
相互交互和沟通(如果须要的话)。
     1.2 如何在Delphi中使用接口
        1.2.1 声明接口
             IMyInterface = interface(IInterface) //说明(1)
             ['{63E072DF-B81E-4734-B3CB-3C23C7FDA8EA}'] //说明(2)
                 function GetName(const str: String): String; stdcall;
                function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; //说明(3)
                 function _AddRef: Integer; stdcall; //使接口引用数加1。
                 function _Release: Integer; stdcall;//使接口引用数减1,当小于等于0时作释放动作。
             end;
            
             说明(1):如果有继续关系则在括号里填父接口,否则省却,如:IMyInterface = interface这样就行。
             说明(2):此GUID可选,如果要实现具有COM特性的接口的话则需要加上,Delphi中对于有GUID的接口在运行时在VMT表的
                         预定位置生成接口的信息,如接口方法的定义、方法参数定义能详细信息。
             说明(3):接口必须实现这三个函数。
        1.2.2 接口的实现
             接口服务是由类来实现的。
                 TIntfClass = class(TObject, IMyInterface)
                 private
                     FCounter: Integer;
                     FRefCount: Integer;
                 public
                     function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
                     ...
                 end;
        1.2.3 获取接口
                 a. 使用类型转换。
                         如:var aIntf: IMyInterface;
                         begin
                             aObj := TIntfClass.Create;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值