gpt4 book ai didi

delphi - 如何重写委托(delegate)方法的实现?

转载 作者:行者123 更新时间:2023-12-03 15:22:31 26 4
gpt4 key购买 nike

在 Delphi 2007 中,我使用一个类来实现第二类受支持的接口(interface)之一。这是有效的。 Delphi 帮助指出:

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.

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

我想知道这是否是因为我在创建类时通过另一个接口(interface)访问该类。

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

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, IInterface1, IInterface2)
strict private
....
procedure test();
public
....
procedure IInterface1.AProc = test;
end;

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

so TMyClassIInterface1.AProc 映射到 Test() (而不是 FDelegate.AProc)结果是TMyClass.AProc

关于delphi - 如何重写委托(delegate)方法的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9527615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com