Похоже, ошибка.
Если вы скомпилируете с отладочными dcu (обычно не делайте этого, если вы не хотите потерять здравомыслие!), Вы увидите, что вызов компаратору пошел не так. (Возможно, необязательное) третье значение функции сравнения не установлено и вызывает нарушение прав доступа.
Так что, возможно, вы не можете поместить указатели методов в общий список.
Хорошо, следующие работы:
uses
Generics.Defaults;
type
TForm4 = class(TForm)
...
private
procedure myNotifyEvent(Sender: TObject);
end;
TComparer<T> = class (TInterfacedObject, IComparer<T>)
public
function Compare(const Left, Right: T): Integer;
end;
implementation
uses
Generics.Collections;
var
list: TList<TNotifyEvent>;
begin
list := TList<TNotifyEvent>.Create(TComparer<TNotifyEvent>.Create);
try
list.Add(myNotifyEvent);
list.Remove(myNotifyEvent);
finally
FreeAndNil(list);
end;
end;
procedure TForm4.myNotifyEvent(Sender: TObject);
begin
ShowMessage('event');
end;
{ TComparer<T> }
function TComparer<T>.Compare(const Left, Right: T): Integer;
begin
Result := 0;
end;
Вы должны определить свой собственный компаратор, возможно, с большим интеллектом; -).