Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Property setzen


martin300 - Mo 21.09.09 14:53
Titel: Property setzen
Hallo,
ich möchte zb. die Prozedur

Delphi-Quelltext
1:
procedure setx (Value : Integer);                    

als Property festlegen; Rückgabewert gibt es keinen;
Wie wird diese definiert?

property x [Value: Integer] ..... wie gehts da weiter?


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 21.09.2009 um 16:35


Gausi - Mo 21.09.09 14:57

Also eine write-only-Property? Das müsste so gehen

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
private
   fx: Integer;
   procedure SetX(value: Integer);
public
  property X: Integer {read fx} write SetX;

//...

procedure TMyClass.SetX(value: Integer);
begin
  fx := value;
end;


martin300 - Mo 21.09.09 15:09

Danke das funktioniert.
Und wie würde

Delphi-Quelltext
1:
procedure setxy (Value1 : Integer, Value2 : Integer);                    

aussehen?


Nersgatt - Mo 21.09.09 15:18

Wie würde denn dann die Zuweisung an die Property einer Instanz Deiner Klasse aussehen? Wenn Du Dir diese Frage beantworteste, wirst Du erkennen, dass sowas nicht gehen kann.

Jens


martin300 - Mo 21.09.09 16:31

Ich hätte die Zuweisung an das Property genauso wie zu einer Methode gemacht. Nur geht das nicht.


Narses - Mo 21.09.09 16:37

Moin!

Klar geht das nicht, da eine Eigenschaft immer nur einen Wert annehmen kann. :zwinker: Alternativ gibt es noch Array-Properties, hier wird dir dann ein Index im Setter/Getter mitgegeben, aber jedes Eigenschaftsfeld im Array hat natürlich auch immer nur einen Wert. :idea:

Anders gesagt: versuch mal einem var Int: Integer; mehr als einen Wert zuzuweisen. ;)

cu
Narses


martin300 - Mo 21.09.09 17:55

Ich habe mir von den Propertys mehr erwartet, als nur einen Zugriff auf Variablen. Naja.
Eine Frage habe ich noch zu den Array Propertys. Als Beispiel:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  TSimpleStringList = class
  private
    FList: array of string;
  protected
    function Get(Index: Integer): string;
    procedure Put(Index: Integer; const S: string);
  public
    property Strings[Index: Integer]: string read Get write Put; default;
  end;


Was passiert beim Anruf von

Delphi-Quelltext
1:
strings[0] := 'text';                    

bzw. wie wird es zu

Delphi-Quelltext
1:
put(0,'text');                    


dummzeuch - Mo 21.09.09 19:06

user profile iconmartin300 hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe mir von den Propertys mehr erwartet, als nur einen Zugriff auf Variablen.


Ein Property ist lediglich eine Kurzform fuer den Aufruf einer Setter/Getter-Methode oder fuer den Zugriff auf eine Variable. Was eine Setter/Getter-Methode dann macht, kann beliebig komplex sein. Das Setzen einer Variablen ist nur der einfachste Fall.

user profile iconmartin300 hat folgendes geschrieben Zum zitierten Posting springen:

Eine Frage habe ich noch zu den Array Propertys. Als Beispiel:
...
Was passiert beim Anruf von

Delphi-Quelltext
1:
strings[0] := 'text';                    

bzw. wie wird es zu

Delphi-Quelltext
1:
put(0,'text');                    


Was soll da passieren? Der Compiler erkennt eine Property-Zuweisung und generiert den Aufrufcode fuer die Setter-Methode.

twm