如何找出具体的类对象已经存在于TInterfaceList中?

时间:2013-08-30 18:32:29

标签: delphi interface delphi-xe2

我有一个名为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多次注册。

1 个答案:

答案 0 :(得分:2)

从Delphi 2010开始,可以从接口转换为对象:

var
  obj: TObject;
  intf: IInterface;
....
obj := intf as IInterface;

获得该功能后,检查对象是否来自特定类是一小步:

if obj is TyConfig then
  ....

通过这些部分,您应该能够解决您的问题。