如果我有一个由第三方实现的现有IInterface
后代,并且我想添加帮助程序,Delphi是否提供了任何简单的方法来实现,而无需手动重定向每个接口方法?也就是说,给定一个这样的界面:
IFoo = interface
procedure Foo1;
procedure Foo2;
...
procedure FooN;
end;
是否支持以下类似内容?
IFooHelper = interface helper for IFoo
procedure Bar;
end;
或
IFooBar = interface(IFoo)
procedure Bar;
end;
TFooBar = class(TInterfacedObject, IFoo, IFooBar)
private
FFoo: IFoo;
public
procedure Bar;
property Foo: IFoo read FFoo implements IFoo;
end;
我特别想知道如何允许我总是用单个变量引用(IFoo,IFooBar或TFooBar)调用Foo1,Foo2和Bar,而不在它们之间切换,并且不添加所有IFoo的方法TFooBar。
答案 0 :(得分:1)
将您的课程更改为:
TFooBar = Class(TInterfacedObject, IFoo, IFooBar)
private
FFoo: IFoo;
public
procedure Bar;
property Foo: IFoo read FFoo implements IFoo ;
end;
您还需要一个构造函数或一些方法来创建IFoo实例并将其放在FFoo中。
答案 1 :(得分:1)
您无法通过对 TFooBar 的引用来访问 IFoo 的方法,因为 TFooBar 未实现< em> IFoo - 它委派 IFoo 。但是你不应该使用 TFooBar 引用来访问接口对象,这就是首先使用接口的全部意义!
注意:为了故意防止这种情况,我采用了一种在我的类上实现接口方法为“受保护”的约定,特别是拒绝访问那些实现细节,除非通过接口本身浮出来。
如果您目前正在获取对 TFooBar 的引用,请将其更改为获取 TFooBar实现的 IFooBar 界面,您将被排序。
答案 2 :(得分:0)
我不确定我理解你所有的担忧,但无论如何,这是我的建议:
IFooBar = interface(IFoo)
procedure Bar;
end;
TFooDelegate = class(TInterfacedObject, IFoo )
private
FFoo: IFoo;
public
property Foo: IFoo read FFoo implements IFoo;
end;
TFooBar = class( TFooDelegate, IFooBar )
procedure Bar;
end;