2012-02-05 1 views
1

Я пытаюсь начать использовать коллекцию части spring4d. Но я не могу подписаться на события, меняющие коллекцию. Получить сообщение об ошибке: [DCC Error]: E2008 Несовместимые типы на:Как использовать IMultiCastEvent из spring4d?

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

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

Свойство OnNotify в TObjectList объявлен:

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; 

Я запутанную%) помогите пожалуйста)

ответ

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>.

 Смежные вопросы

  • Нет связанных вопросов^_^