Es ist sinnvoll, sich an den Standard (bezüglich der Namensgebung) der
VCL zu halten.
Hier erst mal die Vorlage:
Delphi-Quellcode:
TMyClass = class(TPersistent)
private
FOnChange: TNotifyEvent;
protected
procedure DoChange;dynamic;
public
property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;
procedure TMyClass.DoChange;
begin
if Assigned(FOnChange) then
FOnChange(self);
end;
Das Property für das Event greift üblicherweise direkt auf die Eventvariable zu; Set- oder Getfunktionen werden nicht gebraucht.
Soll heissen: hinter read und write steht eine Variable, keine Methode.
Das Event soll nicht direkt aufgerufen werden, sondern wird
indirekt über die
Do-Procedure aufgerufen.
Die Do-Procedure ist die einzige Stelle in der ganzen Klasse, an der auf die Eventvariable
FOnChange zugegriffen wird!!
Jetzt kommt der Trick:
Die Procedure DoChange ist
virtuell.
Damit kann man in abgeleiteten Klassen den Zeitpunkt, wann der Event aufgerufen wird verändern.
In 95% aller Fälle wird man die Procedure DoChange nicht überschreiben wollen; das Standardverhalten reicht meisten aus.
Deshalb ist die Procedure mit dem Schlüsselwort
dynamic versehen; dies spart Speicherplatz.