Delphi 使用部分委托实现接口
我有一个子对象,它只实现接口的一部分:Delphi 使用部分委托实现接口,delphi,interface,Delphi,Interface,我有一个子对象,它只实现接口的一部分: IMyTest = interface procedure P1; procedure P2; end; TMyTestP2Impl = class procedure P2; end; TMyTest = class(TInterfacedPersistent, IMyTest) private FMyTestP2Impl : TMyTestP2Impl; public constr
IMyTest = interface
procedure P1;
procedure P2;
end;
TMyTestP2Impl = class
procedure P2;
end;
TMyTest = class(TInterfacedPersistent, IMyTest)
private
FMyTestP2Impl : TMyTestP2Impl;
public
constructor Create();
destructor Destroy(); override;
procedure P1;
procedure P2;
end;
因此,我必须编写TMyTest.P2
,如下所示:
procedure TMyTest.P2;
begin
FMyTestP2Impl.P2();
end;
我想知道是否有一种有效的语法可以将TMyTest.P2
映射到FMyTestP2Impl.P2
,而无需编写TMyTest.P2
的实现。我的意思是如下所示:
TMyTest = class(TInterfacedPersistent, IMyTest)
private
FMyTestP2Impl : TMyTestP2Impl;
public
constructor Create();
destructor Destroy(); override;
procedure P1;
procedure P2 = FMyTestP2Impl.P2;
end;
您必须使用:
@肯伯拉萨,是的,它起作用了。这就是德尔福的魔力…天哪,我从来不知道你能做到@大卫·费弗南:这是一个难得的时刻——应该有一个徽章;)@KenBourassa根据Stefan链接的文件:如果委托属性属于类类型,则在搜索封闭类及其祖先之前,将先搜索该类及其祖先以查找实现指定接口的方法。因此,可以在属性指定的类中实现一些方法,在声明属性的类中实现其他方法。”这就是为什么
P2()
可以在另一个类中实现,而该类不必实现IMyTest
本身。我多年来一直在使用这种技术,它允许一些简洁的构造。从未出现过任何问题。
type
IMyTest = interface
procedure P1;
procedure P2;
end;
TMyTestP2Impl = class
procedure P2;
end;
TMyTest = class(TInterfacedPersistent, IMyTest)
private
FMyTestP2Impl: TMyTestP2Impl;
property MyTestP2Impl: TMyTestP2Impl read FMyTestP2Impl implements IMyTest;
public
constructor Create;
destructor Destroy; override;
procedure P1;
end;