Sign in Join
Wiki copytemporary

Property/de: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Zurück zu den [[Reserved words/de|reservierten Wörtern]].
22
33# Übersicht
44
5-Das reservierte Wort <b>property</b> gehört zur objektorientierten Programmierung.
5+Das reservierte Wort property gehört zur objektorientierten Programmierung.
66
7-Das reservierte Wort <b>property</b> bestimmt wie über öffentliche Methoden auf eine als privat deklarierte Variable (Datenfeld) zugegriffen wird.
7+Das reservierte Wort property bestimmt wie über öffentliche Methoden auf eine als privat deklarierte Variable (Datenfeld) zugegriffen wird.
88
99Beispiel:
1010
1111``` pascal
1212type
1313 TAuto = class
1414 private
1515 fFarbe: string;
1616 procedure SetFarbe(AFarbe: string);
1717 public
1818 property Farbe: string read fFarbe write SetFarbe; // Liest das Feld AFarbe direkt aus und
1919 // schreibt in das Datenfeld fFarbe über die Prozedur SetFarbe.
2020 end;
2121
2222procedure TAuto.SetFarbe(AFarbe: string);
2323begin
2424 fFarbe := AFarbe;
2525end;
2626```
2727
2828Anwendungs-Beispiel:
2929
3030``` pascal
3131var
3232 Auto: TAuto;
3333
3434begin
3535 Auto := TAuto.Create; // Erstellt das Objekt
3636
3737 // Zwei unterschiedliche Schreibweisen für das gleiche Problem
3838 Auto.Farbe := 'Grün'; // Setzt die Farbe
3939 Auto.SetFarbe('Grün'); // Setzt die Farbe wie oben, nur über eine andere Methode, aber dies sollte man vermeiden,
4040 // da normalerweise der Setter und Getter privat ist.
4141
4242 ShowMessage(Auto.Farbe); // Gibt die Farbe wieder aus
4343
4444 Auto.Free; // Zerstört das Objekt
4545end;
4646```
4747
4848Es ist auch möglich eine Getter-Funktion für das Lesen zu bauen:
4949
5050``` pascal
5151...
5252 private
5353 function GetFarbe: String;
5454 procedure SetFarbe(AFarbe: string);
5555 public
5656 property Farbe: string read GetFarbe write SetFarbe;
5757...
5858function TAuto.GetFarbe: String;
5959begin
6060 Result := fFarbe;
6161end;
6262```
6363
6464Es ist auch möglich ohne Getter- und Setter-Funktion eine property zu definieren:
6565
6666``` pascal
6767...
6868 public
6969 property Farbe: string read fFarbe write fFarbe;
7070...
7171```
7272
7373## Einsatz von keyword "default"
7474
7575Wenn 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.
7676
7777``` pascal
7878...
7979 public
8080 property Farbe: string read fFarbe write fFarbe default 'rot';
8181...
8282```
8383
8484Dies ist nur eine Information für das Streaming-System; daher muß im **constructor** der Komponente der Wert trotzdem gesetzt werden:
8585
8686``` pascal
8787constructor TMyControl.Create (TheOwner: TComponent);
8888begin
8989 inherited Create(TheOwner);
9090 ...
9191 fFarbe := 'rot';
9292 ...
9393end;
9494```
9595
9696Wenn **SetFarbe** definiert ist, kann es auch sinnvoll sein, den **property**-Namen zu verwenden, um die Befehle des Setters auszuführen.
9797
9898``` pascal
9999procedure TAuto.SetFarbe(AFarbe: string);
100100begin
101101 fFarbe := AFarbe;
102102 if fFarbe = 'rot' then fColor := clRed;
103103end;
104104
105105...
106106 Farbe := 'rot';
107107...
108108```
109109
110110## Einsatz von keyword "stored"
111111
112112Dies 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**.
113113
114114In diesem Beispiel wird **Farbe** nicht gespeichert, wenn sie die leere Zeichenkette enthält:
115115
116116``` pascal
117117...
118118 private
119119 function IsFarbeStored: Boolean;
120120...
121121 public
122122 property Farbe: string read fFarbe write fFarbe stored IsFarbeStored;
123123...
124124function TMyControl.IsFarbeStored: Boolean;
125125begin
126126 Result := fFarbe <> '';
127127end;
128128```
129129
130130---
131131*From the Free Pascal wiki, page "Property/de", as it stood on 2022-03-12 after a change by Crore, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history