Seit
r595 kannst du auch folgendes machen:
Delphi-Quellcode:
type
TLogEvent = class(TEventBase<TLogFunc>)
protected
function GetInvoke: TLogFunc; override; // optional
procedure InitInvoke; override;
procedure InternalInvoke(s: string; Args: array of const);
end;
function TLogEvent.GetInvoke: TLogFunc;
begin
// durch das Überschreiben dieser Methode gewinnst du etwas Performance,
// da nicht mehr die generische Implementierung benutzt werden muss
Result := InternalInvoke;
end;
procedure TLogEvent.InitInvoke;
begin
SetInvoke(@TLogEvent.InternalInvoke);
end;
procedure TLogEvent.InternalInvoke(s: string; Args: array of const);
var
i: Integer;
begin
if FEnabled then
for i := 0 to Count - 1 do
Handler[i](s, Args);
end;
Du musst dann allerdings die Instanz selber erstellen und kannst nicht das automatische Initialisieren über den Recordtyp Event<T> benutzen.
Für die Zukunft ist geplant, dass man eigene Klassen registrieren kann, welche dann bei Benutzung des Recordtyps erstellt werden (im
Event<T>.Initialize
).
Somit kann man für bestimmte Signaturen, selbst eine Event Klasse erstellen, die dann auch über weniger Overhead durch die generische Implementierung verfügt und somit performanter ist.