Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Property - wie funktioniert das


G-man - Mo 29.03.04 11:28
Titel: Property - wie funktioniert das
Moin,
ich hab mir eine eigene Klasse geschrieben un möchte nun Properties hinzufügen. Aus der Delphi-Hilfe bin ich nicht schlau geworden und desshalb wollte ich fragen ob dazu jemand ein gutes Tutorial kennt oder mir das erklären kann.


Motzi - Mo 29.03.04 11:38

Luckie hat ein Tutorial zu Klassen geschrieben und auch auf meiner Homepage findest du eine Ausarbeitung zu OOP in Delphi:
http://www.luckie-online.de
http://www.manuel-poeter.de
vielleicht helfen die beiden dir ja weiter...


Christian S. - Mo 29.03.04 11:42

Hallo!

Properties zu verwenden ist nicht schwer. Erst einmal die Deklaration:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
class
  TmyClass = class(TObject)
  private
    Fheight : Integer;
    Fwidth : Integer;

    procedure setWidth (const value : Integer);
    function getWidth : Integer;
  public
    property height : Integer read Fheight write Fheight;
    property width : Integer read getWidth write setWidth;
  end;


Wie Du siehst, gibt es zwei verschiedene Methoden, Properties zu setzen und zu lesen. Zum einen kann man sie auf andere Felder "umleiten" oder aber das Ganze über Prozeduren / Funktionen regeln. Beide Methoden können auch gemischt werden!. Eine Property alleine hat keinen Wert.

Die erste Methode muss nicht weiter implementiert werden. Die Variable, auf welche die Property umleitet existiert ja schon.
Aber für zweite Methode muss man noch ein wenig Quelltext fabrizieren:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TmyClass.setWidth(const value : Integer);
begin
  Fwidth := value;
end;

function TmyClass.getWidth : Integer;
begin
  result := FWidth;
end;

Das ist jetzt natürlich ein selten dämliches Beispiel, weil die Prozedur und die Funktion genau das machen, was auch bei der Verwendung der ersten Methode für width passieren würde. Aber Du kannst in die Funnktion und die Prozedur natürlich reinschreiben, was Du willst.

Dann gibt es natürlich noch die unheimlich praktischen Array-Properties. Die deklaration sieht dann wie folgt aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
private
  function getValue (index : Integer) : Double;
  procedure setValue (index : Integer; const value : Double);
public
  property value : Double read getValue write setValue; default;


Wie Du jetzt value mit Werten füllst, ist Dir überlassen. Wenn nun jemand mit

Delphi-Quelltext
1:
MyClass.value[k]                    

auf die Property zugreift, dann wird k als index übergeben.

Durch das Wörtchen "default" könnte er aber auch mittels

Delphi-Quelltext
1:
MyClass[k]                    

auf die Property zugreifen.

So, ich hoffe, das reicht erst einmal.

MfG
Peter


G-man - Mo 29.03.04 12:04

Vielen dank, diese Informationen sollten reichen.