![]() |
Generics.TObjectList
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:
Wie muss man AObjectList deklarieren, damit die Variable Listenobjekte beider definierter Klassen MyClassList1,2 annehmen kann?
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. 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. |
AW: Generics.TObjectList
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 |
AW: Generics.TObjectList
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. |
AW: Generics.TObjectList
Sowas hatten wir erst neulich
![]() Ein "Problem" mit Generics in Delphi im Gegensatz zu C# ist, dass es keine Kovarianz und "unbound generic types" gibt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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