![]() |
ObjectList mit eigenen Funktionen erweitern?!
Hey,
angenommen ich habe folgende objektorientierte Struktur:
Delphi-Quellcode:
Wie folgt erstelle ich eine Liste:
TCustomObjectList = class(TObjectList)
protected function getItem(Index: Integer): TKlasse; virtual; procedure setItem(Index: Integer; Objekt: TKlasse); virtual; public function Add(Objekt: TKlasse): Integer; virtual; function Remove(Objekt: TKlasse): Integer; virtual; function IndexOf(Objekt: TKlasse): Integer; virtual; procedure Insert(Index: Integer; Objekt: TKlasse); virtual; property Items[index: Integer]: TKlasse read getItem write setItem; default; property PCs[index:Integer]:TPCs read getPCItem write setPCItem; end;
Delphi-Quellcode:
Ich kann ja nun die Items über die Eigenschaft .Count zählen. Wie jedoch kann ich die Einträge in PCs zählen? Muss ich mir da eine eigene Routine schreiben oder wie kann ich das anstellen? Hat jemand vielleicht ein Beispiel für mich?
customList := TCustomObjectList.Create;
Wäre super! |
Re: ObjectList mit eigenen Funktionen erweitern?!
Du versuchst hier 2 Listen in eine zu integrieren. Und das es keine 1:1 Zuordnun ist, erkennt man an deiner Frage. Von daher stellt sich die Frage: Was willst du erreichen? Es sind schliesslich zwei Listen die du haben willst.
|
Re: ObjectList mit eigenen Funktionen erweitern?!
Ja sorry, stimmt...die Frage ist nicht so deutlich rüber gekommen.
Ein anderes Beispiel mit verständlicheren Namen:
Delphi-Quellcode:
D.h. ich will quasi in einer Objektliste zwei Stadtlisten haben. Geht das überhaupt oder wie ist das ansonsten realisierbar? Wenn ja, wie komme ich an den Count von "Hauptstädte"? Über Staedte komme ich über TStadtliste.Count dran, da die property ja auf default gesetzt ist...
type
TStadt = class (TObject) Name : String; Einwohner : Integer; Flaeche : Integer; end; type TStadtliste = class(TObjectList) protected function getStadtItem(Index: Integer): TStadt; virtual; procedure setStadtItem(Index: Integer; Stadt: TStadt); virtual; function getHStadtItem(Index: Integer): TStadt; virtual; procedure setHStadtItem(Index: Integer; Stadt: TStadt); virtual; public function AddStadt(Stadt: TStadt): Integer; virtual; function RemoveStadt(Stadt: TStadt): Integer; virtual; function IndexOfStadt(Stadt: TStadt): Integer; virtual; procedure InsertStadt(Index: Integer; Stadt: TStadt); virtual; function AddHStadt(Stadt: TStadt): Integer; virtual; function RemoveHStadt(Stadt: TStadt): Integer; virtual; function IndexOfHStadt(Stadt: TStadt): Integer; virtual; procedure InsertHStadt(Index: Integer; Stadt: TStadt); virtual; property Staedte[index: Integer]: TStadt read getStadtItem write setStadtItem; default; property Hauptstaedte[index:Integer]:TStadt read getHStadtItem write setHStadtItem; end; Hoffe es ist jetzt verständlicher... |
Re: ObjectList mit eigenen Funktionen erweitern?!
Nee, so geht das nicht. Es ist nur sinnvoll einen Typ Stadt oderhStadt in der Liste zu nutzen. (wie von Mutze schon beschrieben)
Versuchs mal so:
Delphi-Quellcode:
Und daraus jetzt zwei Stadtlisten machen (Achtung - jetzt kommt der riesen Clou von OOP, bzw. weswegen man den ganzen Mist macht :mrgreen:)
type
TStadt = class (TObject) Name : String; Einwohner : Integer; Flaeche : Integer; end; type TStadtliste = class(TObjectList) protected function getStadtItem(Index: Integer): TStadt; virtual; procedure setStadtItem(Index: Integer; Stadt: TStadt); virtual; public function AddStadt(Stadt: TStadt): Integer; virtual; function RemoveStadt(Stadt: TStadt): Integer; virtual; function IndexOfStadt(Stadt: TStadt): Integer; virtual; procedure InsertStadt(Index: Integer; Stadt: TStadt); virtual; property Stadt[index: Integer]: TStadt read getStadtItem write setStadtItem; default; end;
Delphi-Quellcode:
Du erstellst einfach zwei Instanzen und bekommst zwei voneinander unabhängige Listen.
var Staedte:TStadtListe;
var HStaedte:TStadtListe; ... Staedte:=TStadtListe.create; HStaedte:=TStadtListe.create; //jetzt kannst du Staedte und HStaedte nutzen |
Re: ObjectList mit eigenen Funktionen erweitern?!
Hi,
eventuell würde es doch so gehen:
Delphi-Quellcode:
Die Hauptstadtliste könnte dann sich selbst als Hauptsdadtliste haben (d. h. im Konstruktor CreateCapitalList steht FCaptials := self).
type
TTownList = class(TObjectList) private FCapitals: TTownList; constructor CreateCapitalList; //Konstruktor, der nur Hauptsdadtliste erstellt ... public constructor Create; //normaler Konstruktor, der gleich eine Hauptstadtliste erstellt procedure AddTown(Town: TTown; IsCapital: Boolean = false); property Capitals: TTownList read FTownList; ... end; So in der Art wäre mein Vorschlag, ist jetzt noch nicht genau durchdacht. Mfg FAlter |
Re: ObjectList mit eigenen Funktionen erweitern?!
Ich würde es noch anders lösen. Jede Hauptstadt ist auch eine Stadt, somit würde ich einfach dem Element (Stadt) eine Eigenschaft geben, ob sie eine Hauptstadt ist. Zusätzlich kann die Stadtliste eine Funktion bekommen, welche die Elemente durchgeht und eine Liste füllt mit allen Elementen die sie hat, welche die Eigenschaft Hauptstadt gesetzt haben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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