Difference between revisions of "Property/de"
m (Eingefügt: Inhaltsverzeichnis, 2 Ergänzungen, kleinere Korrekturen) |
|||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
{{Property}} | {{Property}} | ||
− | + | ||
− | Zurück zu den [[Reserved words/de|reservierten Wörtern]]. | + | |
− | + | Zurück zu den [[Reserved words/de|reservierten Wörtern]]. | |
− | Das reservierte Wort <b>property</b> gehört zur objektorientierten Programmierung. | + | |
− | Das reservierte Wort <b>property</b> bestimmt wie über öffentliche Methoden | + | __FORCETOC__ |
− | + | ||
− | Beispiel: | + | = Übersicht = |
− | <syntaxhighlight> | + | Das reservierte Wort <b>property</b> gehört zur objektorientierten Programmierung. |
+ | |||
+ | Das reservierte Wort <b>property</b> bestimmt wie über öffentliche Methoden auf eine als privat deklarierte Variable (Datenfeld) zugegriffen wird. | ||
+ | |||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | <syntaxhighlight lang=pascal> | ||
type | type | ||
TAuto = class | TAuto = class | ||
Line 20: | Line 27: | ||
procedure TAuto.SetFarbe(AFarbe: string); | procedure TAuto.SetFarbe(AFarbe: string); | ||
begin | begin | ||
− | + | fFarbe := AFarbe; | |
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 26: | Line 33: | ||
Anwendungs-Beispiel: | Anwendungs-Beispiel: | ||
− | <syntaxhighlight> | + | |
+ | <syntaxhighlight lang=pascal> | ||
var | var | ||
Auto: TAuto; | Auto: TAuto; | ||
Line 43: | Line 51: | ||
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | Es ist auch möglich eine Getter-Funktion für das Lesen zu bauen | + | Es ist auch möglich eine Getter-Funktion für das Lesen zu bauen: |
− | <syntaxhighlight> | + | |
+ | <syntaxhighlight lang=pascal> | ||
... | ... | ||
private | private | ||
Line 60: | Line 68: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | Es ist auch möglich ohne Getter und Setter-Funktion | + | Es ist auch möglich ohne Getter- und Setter-Funktion eine property zu definieren: |
− | <syntaxhighlight> | + | |
+ | <syntaxhighlight lang=pascal> | ||
... | ... | ||
public | public | ||
Line 68: | Line 77: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | < | + | |
− | - | + | == 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. | ||
+ | <syntaxhighlight lang=pascal> | ||
+ | ... | ||
+ | public | ||
+ | property Farbe: string read fFarbe write fFarbe default 'rot'; | ||
+ | ... | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Dies ist nur eine Information für das Streaming-System; daher muß im '''constructor''' der Komponente der Wert trotzdem gesetzt werden: | ||
+ | <syntaxhighlight lang=pascal> | ||
+ | constructor TMyControl.Create (TheOwner: TComponent); | ||
+ | begin | ||
+ | inherited Create(TheOwner); | ||
+ | ... | ||
+ | fFarbe := 'rot'; | ||
+ | ... | ||
+ | end; | ||
+ | </syntaxhighlight> | ||
+ | Wenn '''SetFarbe''' definiert ist, kann es auch sinnvoll sein, den '''property'''-Namen zu verwenden, um die Befehle des Setters auszuführen. | ||
+ | <syntaxhighlight lang=pascal> | ||
+ | procedure TAuto.SetFarbe(AFarbe: string); | ||
+ | begin | ||
+ | fFarbe := AFarbe; | ||
+ | if fFarbe = 'rot' then fColor := clRed; | ||
+ | end; | ||
+ | |||
+ | ... | ||
+ | Farbe := 'rot'; | ||
+ | ... | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == 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: | ||
+ | <syntaxhighlight lang=pascal> | ||
+ | ... | ||
+ | private | ||
+ | function IsFarbeStored: Boolean; | ||
+ | ... | ||
+ | public | ||
+ | property Farbe: string read fFarbe write fFarbe stored IsFarbeStored; | ||
+ | ... | ||
+ | function TMyControl.IsFarbeStored: Boolean; | ||
+ | begin | ||
+ | Result := fFarbe <> ''; | ||
+ | end; | ||
+ | </syntaxhighlight> |
Latest revision as of 12:48, 12 March 2022
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
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;