![]() |
Frage zu Klassen / property Aufbau
Hallo, ich habe eine Frage betreffs einer eigenen Klasse.
Und zwar ist sie z.b. so definiert:
Delphi-Quellcode:
type TTestData = record T1 : integer; T2 : integer; end; type TData = record Wert1 : integer; Wert2 : TTestData; end; type TMeineKlasse = class(TObject) private FData : array of TData; procedure SetWert2 (Index : integer; AValue : integer); function GetWert2(Index : integer) : Integer; public // hier soll die Property hin constructor create; destructor destroy; Property Wert2[Index : integer] : TTestData read GetWert2 write SetWert2; end; Jetzt ist meine Frage wie ich es hinbekomme, dass wenn ich das Object mein Objekt erstellt habe einen solchen Zugriff hinbekomme:
Delphi-Quellcode:
Geht sowas, oder muss ich für jeden parameter von Wert2 eine eigene Property definieren!?
MeinObject := TMeineKlasse.create;
MeinObject.Wert2[0].T2 := 4; Danke |
Re: Frage zu Klassen / property Aufbau
Delphi-Quellcode:
Write kannst Du dabei vergessen...
type
TMeineKlasse = class(TObject) private FData : array of TData; function GetWert2(Index: integer): TTestData; public // hier soll die Property hin constructor create; destructor destroy; override; Property Wert2[Index : integer] : TTestData read GetWert2; end; [...] function TMeineKlasse.GetWert2(Index: integer): TTestData; begin Result := FData[index].Wert2; end; |
Re: Frage zu Klassen / property Aufbau
Halt. Ohne von Records auf Klassen oder Zeiger umzustellen, funktioniert es nicht. Es gab hier schon einige Threads über dieses Problem.
|
Re: Frage zu Klassen / property Aufbau
Hmm... glaube das Problem hatte ich sogar selber mal und hatte dazu sogar selber ein Thread aufgemacht.
Naja, in meinem Alter darf man auch mal vergesslich werden :oops: |
Re: Frage zu Klassen / property Aufbau
Zitat:
Delphi-Quellcode:
var
TmpWert: TTestData; begin MeinObject := TMeineKlasse.create; TmpWert := MeinObject.Wert2[0]; TmpWert.T2 := 4; MeinObject.Wert2[0] := TmpWert; end; |
Re: Frage zu Klassen / property Aufbau
Sicher, man kann eine lokale Variable verwenden. Allerdings kann dann, abhängig von der Implementation von Getter und Setter, die Semantik eine ganz andere sein. Man stelle sich einmal vor, dass die Speicherseite unseres Objektes absichtlich geunmappt ( :mrgreen: ) wurde, mit der Absicht, in einem Exceptionhandler auf Zugriffe zu reagieren. Der Exceptionhandler wird dann einen Lesezugriff feststellen, auf den er mitunter nicht vorbereitet ist. Zugegebenermaßen ist dieses Beispiel etwas gestellt, da man bei solchen Aktionen kaum Objektinstanzen verwenden wird. Aber es kann bei dem genannten Workaround durchaus zu unerwarteten Komplikationen führen. Das Hauptargument dürfte aber wohl sein, dass zweimal unnötig Speicher kopiert wird.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 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