Delphi-Quellcode:
type
TInternalCallback<T> = class(TList<T>)
procedure Add(const Value: T); virtual; abstract;
procedure Remove(const Value: T); virtual; abstract;
end;
TCallback<T> = class(TInternalCallback<TProc<T>>)
procedure Call(const Sender: T);
end;
procedure TCallback<T>.Call(const Sender: T);
var
i: Integer;
begin
for i := 0 to Count - 1 do
Items[i](Sender);
end;
Man sollte niemals Typenparameter mit konkreten Typen verwechseln. TProc ist ein in SysUtils definierter Typ.
Alternativ:
Delphi-Quellcode:
type
TEvent = procedure of object;
TEvent<T> = procedure(Sender: T) of object;
TInternalCallback<T> = class(TList<T>)
procedure Add(const Value: T); virtual; abstract;
procedure Remove(const Value: T); virtual; abstract;
end;
TCallback<T> = class(TInternalCallback<TEvent<T>>)
procedure Call(const Sender: T);
end;
procedure TCallback<T>.Call(const Sender: T);
var
i: Integer;
begin
for i := 0 to Count - 1 do
Items[i](Sender);
end;