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 Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert (https://www.delphipraxis.net/155247-eigenschaften-zusammenhang-mit-methoden-mit-rueckgabewert.html)

FriendOfDelphi 14. Okt 2010 13:50

Delphi-Version: 5

Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
 
Hallo Allerseits,

ich habe eine Frage zu Methoden mit Rückgabewert.

Ich hatte zunächst folgende Methode und Eigenschaft implementiert:
Delphi-Quellcode:
procedure SetzeBetriebsArt(iBetriebsArt: integer);

property BetriebsArt: integer read FiBetriebsArt write SetzeBetriebsArt;
Nun wollte ich, dass die Methode einen Rückgabewert liefert und habe die Prozedur in eine Funktion verändert:
Delphi-Quellcode:
function SetzeBetriebsArt(iBetriebsArt: integer): integer;

property BetriebsArt: integer read FiBetriebsArt write SetzeBetriebsArt;
Jetzt meldet der Compiler "Inkompatible Typen" in der Programmzeile, in der die property deklariert ist.

Was mache ich falsch?

Sir Rufo 14. Okt 2010 13:52

AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
 
Der Setter ist immer eine procedure der Getter eine function

Wenn du was anderes haben möchtest, gerne, aber nicht mehr als Getter oder Setter

FriendOfDelphi 14. Okt 2010 15:17

AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
 
Zitat:

Zitat von Sir Rufo (Beitrag 1055786)
Der Setter ist immer eine procedure der Getter eine function

Wenn du was anderes haben möchtest, gerne, aber nicht mehr als Getter oder Setter

Heißt das, dass ein Setter nur als Prozedur realisiert werden und daher keine Information zurück geben kann?

DeddyH 14. Okt 2010 15:20

AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
 
So isses. Mach doch einmal spaßhalber folgendes: schreibe in den public- oder published-Abschnitt Deiner Klasse
Delphi-Quellcode:
property TestProp: integer read GetTestProp write SetTestProp;
und drücke anschließend STRG-SHIFT-C. Nun solltest Du sehen können, wie das auszusehen hat.

FriendOfDelphi 15. Nov 2010 09:42

AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
 
Zitat:

Zitat von DeddyH (Beitrag 1055809)
So isses. Mach doch einmal spaßhalber folgendes: schreibe in den public- oder published-Abschnitt Deiner Klasse
Delphi-Quellcode:
property TestProp: integer read GetTestProp write SetTestProp;
und drücke anschließend STRG-SHIFT-C. Nun solltest Du sehen können, wie das auszusehen hat.

Durch die Tastenkombination wird ja automatisch die Struktur für den Getter und den Setter erstellt:
Delphi-Quellcode:
function TForm1.GetTestProp: integer;
begin

end;

procedure TForm1.SetTestProp(const Value: integer);
begin

end;
Aber warum ist der Getter eine Funktion und der Setter eine Prozedur und nicht umgekehrt?
Ich möchte doch eine Rückmeldung darüber haben, ob das Ändern von "TestProp" funktioniert hat, oder ob ein Fehler aufgetreten ist. Und das ginge doch nur über "result" in einer Funktion? Wo liegt hier mein Denkfehler?

DeddyH 15. Nov 2010 09:45

AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
 
Der Getter gibt den aktuellen Wert der Property zurück (Funktion), der Setter soll den Wert neu setzen (Prozedur). Es steht Dir aber frei, im Setter ggf. eine Exception zu werfen, dann weißt Du, ob die Zuweisung funktioniert hat.

FriendOfDelphi 15. Nov 2010 10:12

AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
 
Zitat:

Zitat von DeddyH (Beitrag 1061559)
Der Getter gibt den aktuellen Wert der Property zurück (Funktion), der Setter soll den Wert neu setzen (Prozedur). Es steht Dir aber frei, im Setter ggf. eine Exception zu werfen, dann weißt Du, ob die Zuweisung funktioniert hat.

Wenn ich die Fehlerbehandlung über eine Exception abwickle, müsste ich z.B. eine öffentliche Variable "Error" einführen.
Dann würde dies innerhalb der Setter-Prozedur stehen:
Delphi-Quellcode:
try
 if (value<10) then
   begin
     TestProp := 1;
     Error :=0;
   end;
except
  Error := 1;
end;
Ich hätte aber lieber im aufrufenden Quellcode eine Rückmeldung wie:
Delphi-Quellcode:
[...]
Mache irgendwas...
Ergebnis:=SetTestProp(9); //Ergebnis soll dann gleich 0 sein

Ergebnis:=SetTestProp(99); //Ergebnis soll dann gleich 1 sein
[...]
Geht das auch?

DeddyH 15. Nov 2010 10:20

AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
 
Nochmal: der Setter ist immer eine Prozedur. Du könntest aber verschiedene Exception-Klassen definieren und diese dann entsprechend auslösen. Im aufrufenden Programm brauchst Du dann einen try-except-Block. Ungetestet:
Delphi-Quellcode:
type
  EValueTooSmall = class(Exception);
  EValueTooLarge = class(Exception);

procedure TDeineKlasse.SetTestProp(const value: integer);
begin
  if value < 10 then
    raise EValueTooSmall.Create('Der Wert muss mindestens 10 betragen.')
  else if value > 100 then
    raise EValueTooLarge.Create('Der Wert darf maximal 100 betragen.')
  else
    FTestProp := value;
end;

Sir Rufo 15. Nov 2010 10:21

AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
 
Zitat:

Zitat von FriendOfDelphi (Beitrag 1061572)
Zitat:

Zitat von DeddyH (Beitrag 1061559)
Der Getter gibt den aktuellen Wert der Property zurück (Funktion), der Setter soll den Wert neu setzen (Prozedur). Es steht Dir aber frei, im Setter ggf. eine Exception zu werfen, dann weißt Du, ob die Zuweisung funktioniert hat.

Wenn ich die Fehlerbehandlung über eine Exception abwickle, müsste ich z.B. eine öffentliche Variable "Error" einführen.
Dann würde dies innerhalb der Setter-Prozedur stehen:
Delphi-Quellcode:
try
 if (value<10) then
   begin
     TestProp := 1;
     Error :=0;
   end;
except
  Error := 1;
end;
Ich hätte aber lieber im aufrufenden Quellcode eine Rückmeldung wie:
Delphi-Quellcode:
[...]
Mache irgendwas...
Ergebnis:=SetTestProp(9); //Ergebnis soll dann gleich 0 sein

Ergebnis:=SetTestProp(99); //Ergebnis soll dann gleich 1 sein
[...]
Geht das auch?

Dann schreib dir doch sowas ...

Es geht aber NICHT als Setter einer Property

dominikkv 15. Nov 2010 13:23

AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
 
Kleine Frage: Wie stellst du dir das vor? Wie willst du das "Ergebnis" bekommen?
Delphi-Quellcode:
// Normal, mit Procedure als Setter:
Klasse.Eigenschaft := 10;

// Ausgedacht, mit Funktion als Setter:
Ergebnis := Klasse.Eigenschaft := 10;
Denk doch mal kurz darüber nach.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 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