加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何覆盖委托方法实现?

发布时间:2020-12-15 09:22:55 所属栏目:大数据 来源:网络整理
导读:在Delphi 2007中,我使用一个类来实现第二类支持的接口之一.这很有效.德尔福帮助指出: By default,using the implements keyword delegates all interface methods. However,you can use methods resolution clauses or declare methods in your class that
在Delphi 2007中,我使用一个类来实现第二类支持的接口之一.这很有效.德尔福帮助指出:

By default,using the implements keyword delegates all interface
methods. However,you can use methods resolution clauses or declare
methods in your class that implement some of the interface methods to
override this default behavior.

但是,当我在我的第二个类中声明一个具有其中一个接口方法的匹配签名的方法时,它不会被调用.

我想知道这是不是因为我在创建它时通过另一个界面访问该类.

下面是一个演示我的问题的测试程序:

program Project1;

{$APPTYPE CONSOLE}

type
  IInterface1 = interface
  ['{15400E71-A39B-4503-BE58-B6D19409CF90}']
    procedure AProc;
  end;

  IInterface2 = interface
  ['{1E41CDBF-3C80-4E3E-8F27-CB18718E8FA3}']
  end;

  TDelegate = class(TObject)
  protected
    procedure AProc;
  end;

  TMyClass = class(TInterfacedObject,IInterface1,IInterface2)
  strict private
    FDelegate: TDelegate;
    property Delegate: TDelegate read FDelegate implements IInterface1;
  public
    constructor Create;
    destructor Destroy; override;
    procedure AProc;
  end;

procedure TDelegate.AProc;

begin
  writeln('TClassDelegate.AProc');
end;

constructor TMyClass.Create;
begin
  inherited;
  FDelegate := TDelegate.Create;
end;

destructor TMyClass.Destroy;
begin
  FDelegate.Free;
  inherited;
end;

procedure TMyClass.AProc;

begin
  writeln('TMyClass.AProc');
end;

var
  MyObj : IInterface2;

begin
    MyObj := TMyClass.Create;
   (MyObj as IInterface1).AProc;
end.

当我运行这个时,我得到输出:

TClassDelegate.AProc

我想要的是:

TMyClass.AProc

任何帮助赞赏.

解决方法

似乎你必须以这种方式重新声明你的方法:

TMyClass = class(TInterfacedObject,IInterface2)
strict private
  ....
  procedure test();
public
  ....
  procedure  IInterface1.AProc = test;
end;

procedure TMyClass.test;
begin
  writeln('TMyClass.AProc');
end;

所以用于TMyClass的IInterface1.AProc映射到Test()(而不是FDelegate.AProc)结果是TMyClass.AProc

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读