delphi – 如何覆盖委托方法实现?
在Delphi 2007中,我使用一个类来实现第二类支持的接口之一.这很有效.德尔福帮助指出:
但是,当我在我的第二个类中声明一个具有其中一个接口方法的匹配签名的方法时,它不会被调用. 我想知道这是不是因为我在创建它时通过另一个界面访问该类. 下面是一个演示我的问题的测试程序: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |