![]() |
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:
Nun wollte ich, dass die Methode einen Rückgabewert liefert und habe die Prozedur in eine Funktion verändert:
procedure SetzeBetriebsArt(iBetriebsArt: integer);
property BetriebsArt: integer read FiBetriebsArt write SetzeBetriebsArt;
Delphi-Quellcode:
Jetzt meldet der Compiler "Inkompatible Typen" in der Programmzeile, in der die property deklariert ist.
function SetzeBetriebsArt(iBetriebsArt: integer): integer;
property BetriebsArt: integer read FiBetriebsArt write SetzeBetriebsArt; Was mache ich falsch? |
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 |
AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
Zitat:
|
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:
und drücke anschließend STRG-SHIFT-C. Nun solltest Du sehen können, wie das auszusehen hat.
property TestProp: integer read GetTestProp write SetTestProp;
|
AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
Zitat:
Delphi-Quellcode:
Aber warum ist der Getter eine Funktion und der Setter eine Prozedur und nicht umgekehrt?
function TForm1.GetTestProp: integer;
begin end; procedure TForm1.SetTestProp(const Value: integer); begin end; 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? |
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.
|
AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
Zitat:
Dann würde dies innerhalb der Setter-Prozedur stehen:
Delphi-Quellcode:
Ich hätte aber lieber im aufrufenden Quellcode eine Rückmeldung wie:
try
if (value<10) then begin TestProp := 1; Error :=0; end; except Error := 1; end;
Delphi-Quellcode:
Geht das auch?
[...]
Mache irgendwas... Ergebnis:=SetTestProp(9); //Ergebnis soll dann gleich 0 sein Ergebnis:=SetTestProp(99); //Ergebnis soll dann gleich 1 sein [...] |
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; |
AW: Eigenschaften in Zusammenhang mit Methoden mit Rückgabewert
Zitat:
Es geht aber NICHT als Setter einer Property |
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:
Denk doch mal kurz darüber nach.
// Normal, mit Procedure als Setter:
Klasse.Eigenschaft := 10; // Ausgedacht, mit Funktion als Setter: Ergebnis := Klasse.Eigenschaft := 10; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz