Sign in Join
Wiki copytemporary

Property/de: what changed

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

Title: Property/de

OldNewLine
1+Zurück zu den [[Reserved words/de|reservierten Wörtern]].
2+
3+# Übersicht
4+
5+Das reservierte Wort <b>property</b> gehört zur objektorientierten Programmierung.
6+
7+Das reservierte Wort <b>property</b> bestimmt wie über öffentliche Methoden auf eine als privat deklarierte Variable (Datenfeld) zugegriffen wird.
8+
9+Beispiel:
10+
11+``` pascal
12+type
13+ TAuto = class
14+ private
15+ fFarbe: string;
16+ procedure SetFarbe(AFarbe: string);
17+ public
18+ property Farbe: string read fFarbe write SetFarbe; // Liest das Feld AFarbe direkt aus und
19+ // schreibt in das Datenfeld fFarbe über die Prozedur SetFarbe.
20+ end;
21+
22+procedure TAuto.SetFarbe(AFarbe: string);
23+begin
24+ fFarbe := AFarbe;
25+end;
26+```
27+
28+Anwendungs-Beispiel:
29+
30+``` pascal
31+var
32+ Auto: TAuto;
33+
34+begin
35+ Auto := TAuto.Create; // Erstellt das Objekt
36+
37+ // Zwei unterschiedliche Schreibweisen für das gleiche Problem
38+ Auto.Farbe := 'Grün'; // Setzt die Farbe
39+ Auto.SetFarbe('Grün'); // Setzt die Farbe wie oben, nur über eine andere Methode, aber dies sollte man vermeiden,
40+ // da normalerweise der Setter und Getter privat ist.
41+
42+ ShowMessage(Auto.Farbe); // Gibt die Farbe wieder aus
43+
44+ Auto.Free; // Zerstört das Objekt
45+end;
46+```
47+
48+Es ist auch möglich eine Getter-Funktion für das Lesen zu bauen:
49+
50+``` pascal
51+...
52+ private
53+ function GetFarbe: String;
54+ procedure SetFarbe(AFarbe: string);
55+ public
56+ property Farbe: string read GetFarbe write SetFarbe;
57+...
58+function TAuto.GetFarbe: String;
59+begin
60+ Result := fFarbe;
61+end;
62+```
63+
64+Es ist auch möglich ohne Getter- und Setter-Funktion eine property zu definieren:
65+
66+``` pascal
67+...
68+ public
69+ property Farbe: string read fFarbe write fFarbe;
70+...
71+```
72+
73+## Einsatz von keyword "default"
74+
75+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.
76+
77+``` pascal
78+...
79+ public
80+ property Farbe: string read fFarbe write fFarbe default 'rot';
81+...
82+```
83+
84+Dies ist nur eine Information für das Streaming-System; daher muß im **constructor** der Komponente der Wert trotzdem gesetzt werden:
85+
86+``` pascal
87+constructor TMyControl.Create (TheOwner: TComponent);
88+begin
89+ inherited Create(TheOwner);
90+ ...
91+ fFarbe := 'rot';
92+ ...
93+end;
94+```
95+
96+Wenn **SetFarbe** definiert ist, kann es auch sinnvoll sein, den **property**-Namen zu verwenden, um die Befehle des Setters auszuführen.
97+
98+``` pascal
99+procedure TAuto.SetFarbe(AFarbe: string);
100+begin
101+ fFarbe := AFarbe;
102+ if fFarbe = 'rot' then fColor := clRed;
103+end;
104+
105+...
106+ Farbe := 'rot';
107+...
108+```
109+
110+## Einsatz von keyword "stored"
111+
112+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**.
113+
114+In diesem Beispiel wird **Farbe** nicht gespeichert, wenn sie die leere Zeichenkette enthält:
115+
116+``` pascal
117+...
118+ private
119+ function IsFarbeStored: Boolean;
120+...
121+ public
122+ property Farbe: string read fFarbe write fFarbe stored IsFarbeStored;
123+...
124+function TMyControl.IsFarbeStored: Boolean;
125+begin
126+ Result := fFarbe <> '';
127+end;
128+```
129+
130+---
131+*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