1

我正在尝试开始使用 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;

我很困惑%)请帮助)

4

1 回答 1

5

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

类.pas:

TCollectionNotification = (cnAdded, cnExtracting, cnDeleting);

泛型.Collections.pas

TCollectionNotification = (cnAdded, cnRemoved, cnExtracted);

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

TCollectionNotification = Generics.Collections.TCollectionNotification;

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

附言

推荐使用接口版本IList<T>

于 2012-02-05T16:17:37.257 回答