如何使用spring4d中的IMultiCastEvent?

时间:2012-02-05 15:17:03

标签: delphi spring4d

我尝试开始使用spring4d的集合部分。但我不能订阅收集更改事件。得到错误:[DCC错误]:E2008不兼容的类型:

var
  TestList: TObjectList<TObject>;
begin
  ... List initialization code ...

  TestList.OnNotify.Add(TestHandler);     <--- Error here
end

TObjectList的OnNotify属性声明为:

property OnNotify: ICollectionNotifyDelegate<T>,其中

ICollectionNotifyDelegate<T> = interface(IMulticastEvent<Generics.Collections.TCollectionNotifyEvent<T>>)
end;

即。 OnNotify.Add方法需要一个Generics.Collections.TCollectionNotifyEvent,声明为:

TCollectionNotifyEvent<T> = procedure(Sender: TObject; const Item: T; 
    Action: TCollectionNotification) of object;

我的事件处理程序声明为:

procedure TTestClass.TestHandler(Sender: TObject; const Item: TObject; Action: TCollectionNotification);
begin

end;

我很困惑%)请帮助)

1 个答案:

答案 0 :(得分:5)

这是由不同单位的相同类型定义引起的:

Classes.pas:

TCollectionNotification = (cnAdded, cnExtracting, cnDeleting);

Generics.Collections.pas

TCollectionNotification = (cnAdded, cnRemoved, cnExtracted);

实际上,Spring.Collections使用类型别名来简化用途:

TCollectionNotification = Generics.Collections.TCollectionNotification;

您可以在使用列表子句中的Spring.Collections之后添加Classes

P.S。

建议使用接口版IList<T>