DruckenMister WongFacebook

Object Pascal

von Martin Strohal, Andreas Hausladen, Christian Rehn

Eigenschaften

Eigenschaften (properties) ermöglichen die Zugriffssteuerung auf Felder. Eigenschaften selbst enthalten keine Werte, sondern geben an, wie beim lesenden oder schreibenden Zugriff auf ein Feld vorzugehen ist.

Eigenschaften werden sinnvollerweise im public- oder published-Abschnitt einer Klasse definiert:

type TAuto = class
private
FFarbe: string;
FBaujahr: integer;
procedure SetFarbe(Farbe: string);
public
property Farbe: string read FFarbe write SetFarbe;
end;

Die Verwendung von Eigenschaften ist bereits im Abschnitt "Zugriff auf Objekte" angesprochen worden.

Eine Eigenschaft verfügt über eine read- oder eine write-Angabe oder über beide. Dahinter folgt dann entweder direkt der Name des Feldes, auf das lesend oder schreibend zugegriffen werden soll, oder der Name einer Methode, die den Zugriff steuern soll.

Wird für read eine Methode verwendet, darf diese keinen Parameter haben und muss einen Rückgabewert liefern, der dem Typ der Eigenschaft entspricht. Bei einem Feld muss dieses natürlich auch den Typ der Eigenschaft haben.

Eine Methode für write muss genau einen Aufrufparameter besitzen, der ebenfalls dem Typ der Eigenschaft entspricht. Hinter read und write selbst wird jedoch immer nur der reine Methodenname ohne Parameter oder Rückgabewert angegeben.

Beispiel:

property Farbe: string read GetFarbe write SetFarbe;
...
function TAuto.GetFarbe: string;
procedure TAuto.SetFarbe(wert: string);

Enthält eine Eigenschaft nur eine read-Angabe, kann sie nur gelesen werden; enthält sie nur eine write-Angabe, kann sie nur geschrieben werden. Im jeweils anderen Fall tritt ein Fehler auf.

Properties können nicht als var-Parameter eingesetzt werden, da es sich bei ihnen ja nicht um direkte Zugriffe auf Felder handeln muss; sondern es können ja "nur" Methoden dahinter stecken.

Array-Eigenschaften

Eigenschaften können auch wie Arrays arbeiten. Die Syntax sieht in einem solchen Fall wie folgt aus:

property Adressen[index: integer]: string read GetAdresse write SetAdresse;
...
function TKlasse.GetAdresse(index: integer): string;
procedure TKlasse.SetAdresse(index: integer; wert: string);

Klasseneigenschaften

In Delphi für .NET gibt es sog. Klasseneigenschaften. Diese Eigenschaften sind statisch und werden nicht an einer Instanz verwendet, sondern gelten für die Klasse. Deklariert werden sie im class var-Abschnitt einer Klassendefinition.