Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#11

Re: Objektereignisse bearbeiten

  Alt 2. Mär 2005, 14:25
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.
Andreas
  Mit Zitat antworten Zitat