![]() |
Re: Serialisieren eines Objektes unter D7
Also es gibt die Eigenschaft aber ich kann sie irgendwie nicht verwenden. Sie wird auch in der Programmierhilfe nicht angezeigt... :gruebel:
Zitat:
|
Re: Serialisieren eines Objektes unter D7
Moin,
da kommt unsere geliebte Collection ja mal wieder zu ehren :-D Vielleicht könnte man diesen thread mit dem der CodeLib verbinden, denn hier sammeln sich ja schon interessante fakten. Zum problem, wenn du aus dem item, auf eine property der collection zugreifen willst, dann musst du 'casten'. Oder entsprechende kapselungen bereitstellen. Ungefähr so:
Delphi-Quellcode:
ich hoffe deine frage zielte auf soetwas ab? Davon abgesehen würde ich TmxJsCollection benutzen, da die daten somit als text gespeichert werden können, was in der entwicklung ein schnelles einsehen und modifizieren ermöglicht :-D
type
// Angenommen das ist deine CollectionKlasse TMyCollection = class(TmxJsCollection) ... published property MyProp:TFoo read etc.. end; // angenommen das ist deine itemklasse TMyItem = class(TCollectionItem) private function GetMyCollection:TMyCollection; public property MyCollection: TMyCollection read GetMyCollection; // collection gecasted kapseln end; function TMyItem.GetMyCollection:TMyCollection; begin result := (Collection as TMyCollection); end; .... // jetzt kannst du aus jedem item einfach, die properties der collection abrufen, ohne jedesmal explizit zu casten: MyCollection.MyProp := bar; |
Re: Serialisieren eines Objektes unter D7
Hallo,
wenn ich mir die Zeichnung anschaue, dann vermute ich das Mr_G soetwas meint:
Delphi-Quellcode:
Jetzt möchte Mr_G über SubCollection_1 auf XYZ Zugreifen.
TSubCollection_1_Item = class(TCollectionItem) // wird von SubCollection_1 verwaltet !!!
... TCollection_1 =class(TmxJsCollection) private FSubCollection_1 : TmxJsCollection; FXYZ : Integer; public property SubCollection_1 : TmxJsCollection read FSubCollection_1 write FSubCollection_1; property XYZ: Integer read FXYZ write FXYZ; end; SubCollection_1.Collection. weiter kommt Mr_G z.Z. noch nicht. Jetzt würde ich für SubCollection_1 einen Nachfahren von TmxJsCollection basteln. Diesem Nachfahren würde ich eine Parent Eigenschaft verpassen
Delphi-Quellcode:
Jetzt geht folgendes:
TSubCollection_1_Item = class(TCollectionItem) // wird von SubCollection_1 verwaltet !!!
... TCollection_1 =class; TmxJsCollectionParent=class(TmxJsCollection) private FParent : TCollection_1; public property Parent : TCollection_1 read FParent write FParent; end; TCollection_1 =class(TmxJsCollection) private FSubCollection_1 : TmxJsCollectionParent; FXYZ : Integer; public constructor Create(ItemClass : TCollectionItemClass); property SubCollection_1 : TmxJsCollectionParent read FSubCollection_1 write FSubCollection_1; property XYZ: Integer read FXYZ write FXYZ; end; ... TCollection_1.constructor.Create(ItemClass : TCollectionItemClass); begin inherited Create(ItemClass); FSubCollection_1:=TmxJsCollectionParent(TSubCollection_1_Item); FSubCollection.Parent:=Self; // Hier ist es !!!!!!!! ... end;
Delphi-Quellcode:
(ungetested)
TmxJsCollectionParent(TSubCollection_1_Item.Collection).Parent.XYZ
|
Re: Serialisieren eines Objektes unter D7
Ahso, ich hab dieses problem immer mit TOwnedCollection gelöst. Dazu hab ich einfach den vorfahr von TJsCollection geändert. So kann man schön auf den owner zugreifen, auch wenn es konzeptionell nicht so schön ist. Letzendlich kommt es immer drauf an, was man erreichen will...vielleicht denkt Mr_G da auch zu kompliziert (soll ja vorkommen) und es gibt eine einfache lösung?
|
Re: Serialisieren eines Objektes unter D7
Zitat:
|
Re: Serialisieren eines Objektes unter D7
Hmmm
Ersma Sorry das ich mich so lange nich gemeldet hab (Grippe :cry: )... Nun aber wieder zum Thema: Welche der Lösungen ist für mein beschriebenes Problem nun die beste und falls es die mit TOwnedCollection ist, wie benutze ich das :?: Nochmal danke der Hilfe :thumb: |
Re: Serialisieren eines Objektes unter D7
Zitat:
|
Re: Serialisieren eines Objektes unter D7
Zitat:
|
Re: Serialisieren eines Objektes unter D7
Da ich mich aus zeitmangel erst jetzt wieder mit dem Thema beschäftigt habe, habe ich nun immernoch ein Problem:
Ich habe das mit der OwnedCollection gemacht, was auch so aussieht als sei es die Perfekte Lösung meines Problems. Leider kann ich sie nicht umsetzen weil meinem Objekt mit dem Vorfahren TCollectionItem die Eigenscaft Collection fehlt. Ich kann besagte Eigenschaft einfach nicht nutzen (wird u.A. von der Programmierhilfe auch nicht angezeigt). Daraus folgt das ich natürlich auch nicht auf den Owner meiner Collection zugreifen kann was ich ja erreichen wollte... Was könnte ich falsch gemacht haben? :cry: |
Re: Serialisieren eines Objektes unter D7
Hallo,
da TCollectionItem die property Collection hat, haben alle Nachkommen diese property. Die property Collection ist aber vom Type TCollection evt. muss Du für den Zugriff noch auf Deinen TCollection Nachfahren casten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 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