Невозможно переопределить TCollection.Notify: объявление уведомления отличается от предыдущего объявления

Примечание. Заголовок другого вопроса отличается, что не позволяет определить его как соответствующий.

System.Classes

TCollection = class(TPersistent)
protected
  procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); virtual;
end;

MyUnit

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  Vcl.ExtCtrls, DB, System.Generics.Collections;

TTextDisplayLineInfos = class(TCollection)
protected
  procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); override; //Here "[dcc32 Error] MyUnit.pas(85): E2037 Declaration of 'Notify' differs from previous declaration"
end;

implementation

procedure TTextDisplayLineInfos.Notify(Item: TCollectionItem;
  Action: TCollectionNotification);
begin
  inherited; //Here "[dcc32 Error] MyUnit.pas(475): E2008 Incompatible types"
  //..............
end;

Подпись метода Notify была взята copy-paste, поэтому ошибок быть не могло;

ошибка

В разделе интерфейса:

[ошибка dcc32] MyUnit.pas(85): E2037 Объявление "Уведомить" отличается от предыдущего объявления

В разделе реализации:

[Ошибка dcc32] MyUnit.pas(475): E2008 Несовместимые типы

Вопрос

Что не так?

1 ответ

Решение

К сожалению, Delphi заявляет TCollectionNotification дважды: один находится в System.Classes, а другой - в System.Generics.Collections.

Чтобы обойти эту проблему, переместите System.Generics.Collections до System.Classes в предложении использования или квалифицируйте его как System.Classes.TCollectionNotification).

Другие вопросы по тегам