![]() |
Endlosschleife bei Property
Hallo zusammen,
ich versuche gerade mit Propertys zu arbeiten. Irgendwas mach ich aber falsch:
Delphi-Quellcode:
TTest = class(TObject) strict private procedure SetProperty1(val : Integer); function GetProperty1 : Integer; public property Property1 : Integer read GetProperty1 write SetProperty1; end; ... function TTest.GetProperty1: Integer; begin result := Property1; end; procedure TTest.SetProperty1(val : Integer); begin Property1 := val; // SetPropery wird wieder aufgerufen --> Endlosschleife Property1 := Property1 + 1; end; procedure TForm1.Button2Click(Sender: TObject); var t : TTest; begin t := TTest.Create; T.Property1 := 5;; ShowMessage(IntToStr(T.Property1)); t.Free; end; Wenn ich an statt "strict private" nur privat verwende und dann
Delphi-Quellcode:
sage, passiert genau das selbe.
procedure TForm1.Button2Click(Sender: TObject);
var t : TTest; begin t := TTest.Create; T.SetProperty1(5); ShowMessage(IntToStr(T.Property1)); t.Free; end; Was mach ich falsch? |
Re: Endlosschleife bei Property
Wo speicherst du denn den Wert für Property1, hmm?
Momentan sieht das bei dir so aus: Um Property1 auszulesen, muss er GetProperty1 ausführen, welches Property1 ausliest, was GetProperty1 ausführt, welches... Du musst die Werte schon irgendwo abspeichern. Im Normalfall würde man dafür ein Feld benutzen:
Delphi-Quellcode:
private
fProperty : Mööp; public property Property1 : Mööp read fProperty1 write SetPropert1; ... procedure TSomeType.SetProperty1(const aValue : Mööp); begin fProperty1 := aValue; end; |
Re: Endlosschleife bei Property
Deine Property verweist auf sich selber! Du solltest eine Private Variable FProperty1 einführen! In dieser Variable steht der Wert, und über den Getter und Setter erreichst du diesen Wert und kannst ihn nach außen mit Property1 zeigen.
|
Re: Endlosschleife bei Property
Hallo,
probiers mal so:
Delphi-Quellcode:
Du willst ja eine interene Variable setzen (setproperty) bzw. abfragen (getproperty) nicht die Property selbst.
TTest = class(TObject)
private myproperty: Integer; procedure SetProperty1(val : Integer); function GetProperty1 : Integer; public property Property1 : Integer read GetProperty1 write SetProperty1; end; ... function TTest.GetProperty1: Integer; begin result := myproperty; end; procedure TTest.SetProperty1(val : Integer); begin myproperty := val; myproperty := myproperty + 1; end; Wenn du in deiner komponente weiterarbeiten willst, dann verwende myproperty. |
Re: Endlosschleife bei Property
Es fehlt auch das private Feld.
Ist ja klar, das du dir so ne Endlos-Rekursion bastelst.
Delphi-Quellcode:
TTest = class(TObject)
strict private FProperty1: Integer; procedure SetProperty1(val : Integer); function GetProperty1 : Integer; public property Property1 : Integer read GetProperty1 write SetProperty1; end; ... function TTest.GetProperty1: Integer; begin result := FProperty1; end; procedure TTest.SetProperty1(val : Integer); begin FProperty1 := val; // SetPropery wird wieder aufgerufen --> Endlosschleife FProperty1 := FProperty1 + 1; end; |
Danke an Alle
so schnell so viele Antworten.
Danke an alle, jetzt hab ich's Verstanden. :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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