Property/de
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
Zurück zu den reservierten Wörtern.
Übersicht
Das reservierte Wort property gehört zur objektorientierten Programmierung.
Das reservierte Wort property bestimmt wie über öffentliche Methoden auf eine als privat deklarierte Variable (Datenfeld) zugegriffen wird.
Beispiel:
type
TAuto = class
private
fFarbe: string;
procedure SetFarbe(AFarbe: string);
public
property Farbe: string read fFarbe write SetFarbe; // Liest das Feld AFarbe direkt aus und
// schreibt in das Datenfeld fFarbe über die Prozedur SetFarbe.
end;
procedure TAuto.SetFarbe(AFarbe: string);
begin
fFarbe := AFarbe;
end;
Anwendungs-Beispiel:
var
Auto: TAuto;
begin
Auto := TAuto.Create; // Erstellt das Objekt
// Zwei unterschiedliche Schreibweisen für das gleiche Problem
Auto.Farbe := 'Grün'; // Setzt die Farbe
Auto.SetFarbe('Grün'); // Setzt die Farbe wie oben, nur über eine andere Methode, aber dies sollte man vermeiden,
// da normalerweise der Setter und Getter privat ist.
ShowMessage(Auto.Farbe); // Gibt die Farbe wieder aus
Auto.Free; // Zerstört das Objekt
end;
Es ist auch möglich eine Getter-Funktion für das Lesen zu bauen:
...
private
function GetFarbe: String;
procedure SetFarbe(AFarbe: string);
public
property Farbe: string read GetFarbe write SetFarbe;
...
function TAuto.GetFarbe: String;
begin
Result := fFarbe;
end;
Es ist auch möglich ohne Getter- und Setter-Funktion eine property zu definieren:
...
public
property Farbe: string read fFarbe write fFarbe;
...
Einsatz von keyword "default"
Wenn eine eigene Komponente geschrieben wird, erscheinen die properties im Objekt-Inspektor! Nun kann über das Anhängen von default ein Standardwert festgelegt werden. String-, Floating-Point- und Pointer-properties haben schon Standardwerte: '', 0 oder Nil. Immer, wenn die property diesen Wert hat, wird sie nicht in der LFM abgespeichert. Außerdem läßt sich im Objekt-Inspektor über das Kontextmenu der property ihr Wert wieder auf diesen Standard zurücksetzen.
...
public
property Farbe: string read fFarbe write fFarbe default 'rot';
...
Dies ist nur eine Information für das Streaming-System; daher muß im constructor der Komponente der Wert trotzdem gesetzt werden:
constructor TMyControl.Create (TheOwner: TComponent);
begin
inherited Create(TheOwner);
...
fFarbe := 'rot';
...
end;
Wenn SetFarbe definiert ist, kann es auch sinnvoll sein, den property-Namen zu verwenden, um die Befehle des Setters auszuführen.
procedure TAuto.SetFarbe(AFarbe: string);
begin
fFarbe := AFarbe;
if fFarbe = 'rot' then fColor := clRed;
end;
...
Farbe := 'rot';
...
Einsatz von keyword "stored"
Dies braucht einen booleschen Wert, der über eine Konstante, ein Feld der Klasse oder eine parameterlose boolesche Funktion gesetzt wird. Sollte dieser Wert False sein, wird die property nicht gestreamt. Wird stored nicht verwendet, dann ist das das Gleiche wie stored True.
In diesem Beispiel wird Farbe nicht gespeichert, wenn sie die leere Zeichenkette enthält:
...
private
function IsFarbeStored: Boolean;
...
public
property Farbe: string read fFarbe write fFarbe stored IsFarbeStored;
...
function TMyControl.IsFarbeStored: Boolean;
begin
Result := fFarbe <> '';
end;