AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TObjectList<> - Frage

Ein Thema von Benmik · begonnen am 15. Apr 2017 · letzter Beitrag vom 16. Apr 2017
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von Olli73
Olli73
Online

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
732 Beiträge
 
#11

AW: TObjectList<> - Frage

  Alt 16. Apr 2017, 12:57
Die Objektliste ist mit dem Typ TBasis konstruiert. In TBasis sind alle Felder, auf die sich die Such- und Sortierfunktionen beziehen.
Wenn ich jetzt mit mit einer Instanz von TErbe arbeiten will, muss ich immer eine Typumwandlung TErbe(Objektliste[i]) vornehmen. Lässt sich das beseitigen?
Wenn in TBasis alle benötigten Properties (besser als public Felder) und Methoden deklariert sind, musst du nicht casten.

Brauchst du Methoden, die es nur in einem der TErbe gibt, musst du entweder casten oder zwei Objektlisten mit dem jeweiligen TErbe erstellen.
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#12

AW: TObjectList<> - Frage

  Alt 16. Apr 2017, 14:10
Folgende Konstruktion:
Delphi-Quellcode:
type
  TBasis = class(TObject)
    Var1 : integer;
    Var2 : string;
  end;

type
  TErbe = class(TBasis)
    Var3 : integer;
    Var4 : string;
  end;

type
TListe = class(TObjectList<TBasis>)
public
  procedure SortiereVar1(Wert:integer)
end;

var Erbe:TErbe; Liste:TListe;
Erbe := Liste[0];
Das geht nicht, weil die Liste vom Typ TBasis und nicht TErbe ist. Mit Erbe := TErbe(Liste[0]); geht es.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.616 Beiträge
 
Delphi 12 Athens
 
#13

AW: TObjectList<> - Frage

  Alt 16. Apr 2017, 14:28
Wieso deklarierst Du die Variable als TErbe, wenn Du nur auf Felder von TBasis zugreifst?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#14

AW: TObjectList<> - Frage

  Alt 16. Apr 2017, 14:52
TErbe hat gegenüber TBasis zusätzliche Felder, die ich benötige. Alle Felder, auf die die Prozeduren und Funktionen von TListe zugreifen, sind aber in TBasis enthalten. Sie werden auch für TErbe benötigt.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#15

AW: TObjectList<> - Frage

  Alt 16. Apr 2017, 16:28
Ich glaube du hast da irgendwo noch einen Logikfehler. Sollte es nicht eher so sein:
Delphi-Quellcode:
type
  TListe<T: TBasis> = class(TObjectList<T>)
  public
    procedure SortiereVar1(Wert:integer)
  end;
Dann hast du nämlich keinerlei Probleme später bei den konkreten Instanzen folgendes zu machen:
Delphi-Quellcode:
var
  List1: TListe<TErbe>;
  List2: TListe<TNochEinErbe>;
  List3: TListe<TBasis>
Besonders, da du ja sagst, dass du in TListe eh nur Felder aus TBasis verwendest. Dies ist durch das Constraint sehr komfortabel möglich.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#16

AW: TObjectList<> - Frage

  Alt 16. Apr 2017, 17:24
Ja, irgendwie kann ich mich nicht richtig verständlich machen.
Also vielleicht nochmal. Ich habe folgende Situation:
Delphi-Quellcode:
type
  TTyp = class(TObject)
    Var1 : integer;
    Var2 : string;
    Var3 : Boolean;
    Var4 : TBitmap;
    Var5..Var20
  end;

type
  TTyp2 = class(TBasis)
    Var1 : integer;
    Var2 : string;
    Var5 : integer;
    Var6 : string;
  end;

type
TListe = class(TObjectList<TTyp1>)
public
  procedure SortiereVar1(Wert:integer)
  procedure SortiereVar2(Wert:string
end;
Ich brauche nun für eine bestimmte Aufgabe Var1 und Var2 und die dazugehörigen Prozeduren der TObjectlist, aber zusätzlich noch Var5 und Var6. Var5..20 brauche ich nicht. Das alles ist nun in Typ2 realisiert.
Zurzeit ist Typ2 eine abgeleitete Klasse von Typ1. Damit stehen mir die neuen Felder und die gewünschten Prozeduren der TObjectList zur Verfügung, aber ich schleppe Var5..Var20 mit und muss immer den Typecast  Erbe := TErbe(Liste[0]) machen. Wie gesagt, es funktioniert alles, aber ich glaube, dass das besser geht. Die Syntax von  TListe<T: TBasis> = class(TObjectList<T>) kannte ich nicht und kann nur mutmaßen, was dahinter steht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.616 Beiträge
 
Delphi 12 Athens
 
#17

AW: TObjectList<> - Frage

  Alt 16. Apr 2017, 17:53
Irgendwie sieht Dein Klassenmodell komisch aus. Sind die Variablen bzw. Felder wirklich in den Ableitungen redeklariert? Wenn ja, wieso? Wenn Deine Objektliste nur auf Felder und Methoden zugreift, die bereits in der Basisklasse deklariert wurden, ist der Typecast unnötig.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#18

AW: TObjectList<> - Frage

  Alt 16. Apr 2017, 18:09
Nein, nein, die Var1 und Var2 wurden bei Typ2 nur zur Verdeutlichung aufgeführt, dass eine Schnittmenge zum Typ1 besteht; in der wirklichen Deklaration fehlen sie natürlich (siehe auch meine Frage und die Antwort von Zacherl), da sie ja schon in der Vorfahr-Klasse Typ1 enthalten sind.
Dass meine Konstruktion nicht optimal ist, will ich gern glauben.
Im Moment sieht es so aus:type Typ1<TObject> type Typ2 = class(Typ1) type Liste = TObjectlist<Typ1> .
Ohne Typecast geht es damit nicht, weil der Compiler meckert, die Liste wär vom Typ1 und die Variable vom Typ2.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.616 Beiträge
 
Delphi 12 Athens
 
#19

AW: TObjectList<> - Frage

  Alt 16. Apr 2017, 18:15
Welche Variable denn?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73
Online

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
732 Beiträge
 
#20

AW: TObjectList<> - Frage

  Alt 16. Apr 2017, 18:24
Sollen in "Liste" Objektinstanzen von Typ1 und Typ2 gespeichert werden oder genügt es dir eine Liste1 vom Typ1 und eine Liste2 vom Typ2 zu haben?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:58 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