Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: generische Callback-Liste erstellen ?

  Alt 21. Apr 2010, 07:57
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;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat