Difference between revisions of "Property/de"

From Free Pascal wiki
Jump to navigationJump to search
m (Eingefügt: Inhaltsverzeichnis, 2 Ergänzungen, kleinere Korrekturen)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
 
{{Property}}
 
{{Property}}
<br>
+
 
Zurück zu den [[Reserved words/de|reservierten Wörtern]].<br>
+
 
<br>
+
Zurück zu den [[Reserved words/de|reservierten Wörtern]].
Das reservierte Wort <b>property</b> gehört zur objektorientierten Programmierung.<br>
+
 
Das reservierte Wort <b>property</b> bestimmt wie über öffentliche Methoden einer als privat deklarierten Variable (Datenfeld) zugegriffen wird.<br>
+
__FORCETOC__
<br>
+
 
Beispiel:<br>
+
= Ü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;
+
  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>
<br>
 
  
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>
  
<br>
+
 
--[[User:Olaf|Olaf]] 09:28, 1 November 2012 (UTC)
+
== Einsatz von keyword "default" ==
[[Category:Reserved words/de]]
+
 
 +
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: &apos;&apos;, 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;