AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ObjectList mit eigenen Funktionen erweitern?!

Ein Thema von Yheeky · begonnen am 29. Mai 2008 · letzter Beitrag vom 30. Mai 2008
Antwort Antwort
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

ObjectList mit eigenen Funktionen erweitern?!

  Alt 29. Mai 2008, 19:31
Hey,

angenommen ich habe folgende objektorientierte Struktur:

Delphi-Quellcode:
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;
Wie folgt erstelle ich eine Liste:

customList := TCustomObjectList.Create; 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?

Wäre super!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: ObjectList mit eigenen Funktionen erweitern?!

  Alt 29. Mai 2008, 20:01
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.
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#3

Re: ObjectList mit eigenen Funktionen erweitern?!

  Alt 29. Mai 2008, 20:36
Ja sorry, stimmt...die Frage ist nicht so deutlich rüber gekommen.

Ein anderes Beispiel mit verständlicheren Namen:

Delphi-Quellcode:
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;
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...

Hoffe es ist jetzt verständlicher...
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: ObjectList mit eigenen Funktionen erweitern?!

  Alt 29. Mai 2008, 21:22
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:
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;
Und daraus jetzt zwei Stadtlisten machen (Achtung - jetzt kommt der riesen Clou von OOP, bzw. weswegen man den ganzen Mist macht )
Delphi-Quellcode:
var Staedte:TStadtListe;
var HStaedte:TStadtListe;
...

Staedte:=TStadtListe.create;
HStaedte:=TStadtListe.create;
//jetzt kannst du Staedte und HStaedte nutzen
Du erstellst einfach zwei Instanzen und bekommst zwei voneinander unabhängige Listen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#5

Re: ObjectList mit eigenen Funktionen erweitern?!

  Alt 29. Mai 2008, 21:53
Hi,

eventuell würde es doch so gehen:

Delphi-Quellcode:
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;
Die Hauptstadtliste könnte dann sich selbst als Hauptsdadtliste haben (d. h. im Konstruktor CreateCapitalList steht FCaptials := self).

So in der Art wäre mein Vorschlag, ist jetzt noch nicht genau durchdacht.

Mfg
FAlter
Felix Alter
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: ObjectList mit eigenen Funktionen erweitern?!

  Alt 30. Mai 2008, 02:37
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 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