se ve como un error.
Si compila con depuración de dcu (normalmente no lo hace a menos que quiera perder la cordura), verá que una llamada al comparador salió mal. Un tercer valor (posiblemente opcional) de una función de comparación no se establece y causa la violación de acceso.
Así que posiblemente no pueda poner punteros a los métodos en una lista genérica.
Ok las siguientes obras:
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;
Usted tiene que definir su propio comparador, con un poco más de inteligencia possiby ;-).
Hmm, esto no es realmente una respuesta a su pregunta. Creo que debería fusionar esto con el código en su pregunta (que, tal como está ahora, no es válido porque el 'myNotifyEvent' como se muestra en la pregunta no coincide con la firma' TNotifyEvent' (no es un método allí). –