AGB  ·  Datenschutz  ·  Impressum  







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

Generics.TObjectList

Ein Thema von HJay · begonnen am 2. Nov 2012 · letzter Beitrag vom 2. Nov 2012
Antwort Antwort
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#1

Generics.TObjectList

  Alt 2. Nov 2012, 09:39
Ich habe immer noch nicht verstanden, wie man mit der "neuen" Generics.TObjectList nun eine Liste definiert, die beliebige andere typisierte Listen aufnehmen kann.

Eine "alte" TObjectList konnte doch auch beliebige abgeleitete Klassen aufnehmen.

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Generics.Collections;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


type
  TMyClass1 = class(TObject)
    Dummy : String;
  end;

  TMyClassList1 = class(TObjectList<TMyClass1>);

  TMyClass2 = class(TObject)
    Test : Integer;
  end;

  TMyClassList2 = class(TObjectList<TMyClass2>);

var
  Form1: TForm1;

  AMyClassList1 : TMyClassList1;
  AMyClassList2 : TMyClassList2;

  AObjectList : TObjectList<TObject>; // ???

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  AObjectList := AMyClassList1; // Compiler-Error
  AObjectList := AMyClassList2;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  AMyClassList1 := TMyClassList1.Create(True);
  AMyClassList2 := TMyClassList2.Create(True);
end;

end.
Wie muss man AObjectList deklarieren, damit die Variable Listenobjekte beider definierter Klassen MyClassList1,2 annehmen kann?

Ich habe eine (alte) Komponente, die eine Art graphische Tabelle darstellt und beliebige abgeleitete TObjectList annimmt. Ich verstehe nicht, wie man dieses alte Konzept mit der neuen Klasse verwendet.
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#2

AW: Generics.TObjectList

  Alt 2. Nov 2012, 09:46
Bei den Generics geht es auch um Typensicherheit. Du kannst die Liste immer für einen Typen zur Zeit nutzen... Aber an verschiedenen Stellen verschiedene Listen für verschiedene Typen haben.

So richtig viel mehr, außer die Typensicherheit hast du von der Generischen Version nicht.

Richtig Cool werden Generics nur, wenn du selbst generische Klassen schreibst.

Grüße
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Generics.TObjectList

  Alt 2. Nov 2012, 09:48
Generics haben einen anderen Zweck.

Die Items sind in einer normalen TObjectList eben Objekte.
Wenn Du in der Liste Autos verwaltest, musst Du die Objekte casten:

(MyList.Items[0] as TCar)...

Eine generische Liste nimmt Dir das ab. Da sind immer alle Items von dem Typ, den Du beim Erzeugen der Liste angegeben hast.

MyList<TCar>.Items[0] is TCar;
MyList<TBicycle>.Items[0] is TBicycle;

Alle Methoden der Liste bezihen sich dann auf den angegeben Typ, ohne dass Du die Klasse umschreiben und die Items casten musst.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Generics.TObjectList

  Alt 2. Nov 2012, 11:58
Sowas hatten wir erst neulich hier.

Ein "Problem" mit Generics in Delphi im Gegensatz zu C# ist, dass es keine Kovarianz und "unbound generic types" gibt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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 22:42 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