我有一个名为ISupport的接口,用于提供技术支持信息。
ISupport = Interface(IInterface)
procedure AddReport(const Report: TStrings);
End;
每个具有相关支持信息的类都实现此接口,并在构造函数中调用:
procedure TySupport.RegisterSupport(Support: ISupport);
begin
if FInterfaceList.IndexOf(Support) = -1 then
FInterfaceList.Add(Support);
end;
使用示例(部分):
TyConfig = class(TInterfacedObject, ISupport)
private
procedure AddReport(const Report: TStrings);
public
constructor Create;
end;
constructor TyConfig.Create;
begin
if Assigned(ySupport) then
ySupport.RegisterSupport(Self);
end;
稍后在代码中我可以查看列表并调用AddReport就好了。
我的问题是有一个类,这个TyConfig,被多次实例化,它将报告的信息完全相同。 FInterfaceList.IndexOf仅避免添加相同的接口。
我想避免TyConfig的ISupport多次注册。
答案 0 :(得分:2)
从Delphi 2010开始,可以从接口转换为对象:
var
obj: TObject;
intf: IInterface;
....
obj := intf as IInterface;
获得该功能后,检查对象是否来自特定类是一小步:
if obj is TyConfig then
....
通过这些部分,您应该能够解决您的问题。