Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Frage zu Klassen / property Aufbau (https://www.delphipraxis.net/135157-frage-zu-klassen-property-aufbau.html)

SimStar001 5. Jun 2009 17:16


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:
MeinObject := TMeineKlasse.create;
MeinObject.Wert2[0].T2 := 4;
Geht sowas, oder muss ich für jeden parameter von Wert2 eine eigene Property definieren!?

Danke

Satty67 5. Jun 2009 17:25

Re: Frage zu Klassen / property Aufbau
 
Delphi-Quellcode:
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;
Write kannst Du dabei vergessen...

Apollonius 5. Jun 2009 17:26

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.

Satty67 5. Jun 2009 17:35

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:

Namenloser 5. Jun 2009 17:50

Re: Frage zu Klassen / property Aufbau
 
Zitat:

Zitat von Apollonius
Halt. Ohne von Records auf Klassen oder Zeiger umzustellen, funktioniert es nicht.

Man kann auch eine temporäre lokale Variable anlegen. Ich würde aber die Lösung mit der Umstellung auf Objekte auch vorziehen.

Delphi-Quellcode:
var
  TmpWert: TTestData;
begin
  MeinObject := TMeineKlasse.create;
  TmpWert := MeinObject.Wert2[0];
  TmpWert.T2 := 4;
  MeinObject.Wert2[0] := TmpWert;
end;

Apollonius 5. Jun 2009 18:06

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 11:25 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