Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ist ein custom write möglich? (https://www.delphipraxis.net/203325-ist-ein-custom-write-moeglich.html)

kagi3624 6. Feb 2020 13:10

Delphi-Version: 6

ist ein custom write möglich?
 
Hallo,

kann man bei einer property die write (funktion?) umdefinieren?

Also ich möchte ungefähr sowas haben:

property Name : String read fName write trim(fName);

...also dass ich noch auf die Werte noch irgendwelche Funktionen werfen kann.

Danke!

haentschman 6. Feb 2020 13:38

AW: ist ein custom write möglich?
 
Moin... :P

Sichwort: Setter :wink:

auf die Schnelle: https://delphi-lernen.de/de/index.php?mid=203&vr=2

stahli 6. Feb 2020 13:44

AW: ist ein custom write möglich?
 
Suche mal nach "Getter" und "Setter".

Getter sind lesende Funktionen, die statt einem Lesen eines Propertywertes ausgeführt werden.
Setter sind entsprechend schreibende Prozeduren.

Du Kannst damit z.B. so etwas lösen:

Delphi-Quellcode:
procedure TPerson.setFirstNamne(Value: string);
begin
  fFirstName := Trim(Value);
end;

Dennis07 6. Feb 2020 15:09

AW: ist ein custom write möglich?
 
Ich denke er redet davon, in einem Typennachfahr die Read-/Write-Klauseln einer Eigenschaft neu zu definieren, ohne die Eigenschaft zu überschreiben. Und das geht nicht. Du kannst die Signaturen oder Les-/Schreibbarkeit einer Eigenschaft nicht überschreiben, sondern nur deren Sichtbarkeit.

kagi3624 6. Feb 2020 15:14

AW: ist ein custom write möglich?
 
Wozu braucht man diese properties dann noch?

Dennis07 6. Feb 2020 15:22

AW: ist ein custom write möglich?
 
Zitat:

Zitat von kagi3624 (Beitrag 1456842)
Wozu braucht man diese properties dann noch?

Eigenschaften sind eine Kürzere Schreibweise für Methoden. Sie sind "pseudo-Variablen", die zum Lesen, Schreiben oder beidem entweder auf echte Member-Variablen, oder auf Methoden verweisen.

Eigenschaften können:
  1. in ihrer Sichtbarkeit in abgeleiteten Klassen erhöht werden, indem sie ohne einen Typen und ohne eine Read-oder Write-Klausel in der Kindklasse neu deklariert werden
  2. auf virtuelle Methoden verweisen, die in Kindklassen überschrieben werden können
  3. von der RTTI aus gelesen und analysiert werden und sind somit in Published-Abschnitten zulässig

Das wars. Mehr ist da nicht möglich. Sie sind also so gesehen nur "semantischer Zucker".

Der schöne Günther 6. Feb 2020 15:50

AW: ist ein custom write möglich?
 
Zitat:

Zitat von kagi3624 (Beitrag 1456842)
Wozu braucht man diese properties dann noch?

Kein Mensch braucht die. Sie haben keinen Mehrwert und eigentlich nur Nachteile. Die Code-Vervollständigung gibt dir keine Auskunft ob eine Property nur les-, nur schreibbar oder beides ist. Du kannst Properties nicht als
Delphi-Quellcode:
var
- oder
Delphi-Quellcode:
out
-Parameter übergeben.

Das sieht man z.B. auch daran dass Sprachen wie Java keine Entsprechung zu Delphi-Properties haben da man wohl gemerkt hat dass man mit einer einfachen Variable oder getXXX() und setXXX()-Methoden besser fährt.

hoika 6. Feb 2020 15:53

AW: ist ein custom write möglich?
 
Hallo,
Zitat:

Wozu braucht man diese properties dann noch
z.B.

property Active: Boolean Read GetActive write SetActive;

Delphi-Quellcode:
procedure SetActive(Wert: Boolean);
begin
  if FActive=Wert then
  begin
    // keine Änderung notwendig
    Exit;
  end;

  if Wert=False then
  begin
    InternalCloseFile;
    FActive:= False;
    Exit;
  end;

  if FFileName='' then
  begin
    // ev. Log
    Exception.Create('FileName not set');
  end;

  if not FileExists(FFileName) then
  begin
    // ev. Log
    Exception.Create('File does not exist');
  end;

  InternalOpenFile;

  FActive:= True;
end;
Hier wird nicht einfach nur FActive gesetzt, sondern es werden noch einige Randbedingungen geprüft.

hoika 6. Feb 2020 15:56

AW: ist ein custom write möglich?
 
Hallo,
und ich benutze die Properties auch sehr gern, um in die Set-Methode Breakpoints zu setzen,
um die Stelle schnell zu finden, wo eine Variable(hier Property) gesetzt wird.

haentschman 6. Feb 2020 16:06

AW: ist ein custom write möglich?
 
Delphi-Quellcode:
if Wert=False then
...sowas gehört mit dem Klammerbeutel gepudert. :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:44 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz