Re: Class -->Error
Du verwechselst Properties mit Getter/Setter
Delphi-Quellcode:
published
property Tierart:string read pArt write pArt; ... |
Re: Class -->Error
Zitat:
|
Re: Class -->Error
Das ist der Direktzugriff auf ein privates Feld ohne explizite Getter/Setter.
|
Re: Class -->Error
Zitat:
Delphi-Quellcode:
Für den Nutzer ist von "außen" nur das Property mean sichtbar, ob dies nun auf eine Variable zurückgreift oder wie hier eine Methode bemüht bleibt völlig transparent. Damit siehst Du schon eine wichtige Eigenschaft der Properties, Du kannst einfach leicht umstellen. Wird z.B. häufig auf den Mittelwert zugegriffen und nur sehr sehr selten (im Verhältnis dazu) ein neuer Wert eingefügt, dann wäre es wohl effizienter den Wert vorzuberechnen und in einer Variable zu speichern. Umgekehrt würde häufiges Hinzufügen von Werten und seltenes Lesen des Mittelwerts von der dyn. Berechnung profitieren. Somit kannst Du hier die Implementierung transparent austauschen. Für den Nutzer der Klasse gibt es immer nur ein Property, wo der zurückgelieferte Wert herkommt ist ihm egal.
TMyList = class(TObject)
private values: TIntegerDynArray; protected function getMean(): Integer; public procedure addValue(const value: Integer); published property mean: Integer read getMean; end; Eine weitere wichtige Eigenschaft siehst Du auch noch, es gibt keine Möglichkeit von außen den Wert zu setzen. Das macht bei einem Mittelwert auch keinen Sinn, immerhin ist der ziemlich klar definiert und hängt allein von den Werten in der Liste ab. Da das Property mean hier nur eine read Eigenschaft besitzt verhält sich das Property wie eine Variable, die man eben nur lesen kann. Natürlich gibt es auch Properties, die man sowohl Lesen als auch Setzen können muss, da hattest Du ja schon Beispiele gesehen. Die Vorteile sind natürlich die Gleichen. Insbesondere kann man (wie DeddyH ja sagte) eben auch die Gültigkeit prüfen. Z.B. könntest Du sicherstellen, dass das Alter >= 0 Jahre ist (ein Integer kann auch kleiner werden). |
Re: Class -->Error
Ich hatte ja auch nicht behauptet, dass Getter generell sinnlos sind ;). Nochmal ein Beispiel:
Delphi-Quellcode:
type
TMyClass = class private FAge: integer; procedure SetAge(const value: integer); function GetAge: integer; public property Age: integer read GetAge write SetAge; end; ... procedure TMyClass.SetAge(const value: integer); begin if value > 0 then FAge := value else raise Exception.Create('Ungeborene gelten nicht.'); end; function TMyClass.GetAge: integer; begin Result := FAge; //einfacher Fall, könnte auch z.B. das Ergebnis einer Berechnung sein end; |
Re: Class -->Error
hmm. ihr habt mich überzeugt.
Bringen wir das mal ein. ^^ |
Re: Class -->Error
Anhängig von deiner Delphiversion(in D7 gehts, in D5 noch nicht) kann Delphi dir auch helfen: Du erstellst zunächst die Klasse mir propertys:
Delphi-Quellcode:
Und drückst dann Strg + Shift + C. Das private Feld mit dem führenden 'F' und die Setter-Methode werden dann automatisch erstellt.
type
TMyClass = class private // published property Anzahl: Integer; end; |
Re: Class -->Error
hmmm. Ich verwende Lazarus. aber die haben da auch irgentsowas in der art... Ich guck mal.
Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 Uhr. |
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