Leider habe ich erst heute wieder Zeit, ein entsprechendes Beispiel zusammenzustellen - vielen Dank Euch schon mal fürs Mitlesen und -denken!
Delphi-Quellcode:
unit form_main;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls,
System.Generics.Collections;
type
TForm1 =
class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
TDummy =
class
private
Fcaption:
string;
public
constructor Create(mValue:
string);
property caption:
string read Fcaption
write Fcaption;
end;
TDummyList =
class(TObjectList<TDummy>)
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
System.Contnrs;
{ TDummy }
constructor TDummy.Create(mValue:
string);
begin
inherited Create;
Fcaption := mValue;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
lList: TObject;
// klar könnte ich in diesem sehr einfachen Beispiel hier TDummyList als Typ angeben
lCaption:
string;
begin
lList := TDummyList.Create;
try
TDummyList(lList).Add(TDummy.Create('
hallo'));
TDummyList(lList).Add(TDummy.Create('
welt'));
// hier funktioniert die Zuweisung leider nicht und ich bekomme eine Zugriffsverletzung
lCaption := TDummy(TObjectList(lList)[0]).Caption;
// so würde es funktionieren
lCaption := TDummy(TObjectList<Tdummy>(lList)[0]).Caption;
lCaption := TObjectList<Tdummy>(lList)[0].Caption;
lCaption := TDummy(TDummyList(lList)[0]).Caption;
// es geht sogar so - und das könnte als Lösung für mich fast reichen - mal sehen
lCaption := TDummy(TObjectList<Tobject>(lList)[0]).Caption;
Memo1.Lines.Add(lCaption);
finally
lList.Free;
end;
end;
end.
Das wäre mal der Code mit der Zeile, die leider nicht funktioniert. Kann mir jemand erklären, warum es nicht geht?
Die entsprechend markierte Zeile könnte tatsächlich für meine Zwecke reichen. Aber ich verstehe nicht ganz, warum das mit der generischen Liste funktioniert, mit der einfachen TObjectList aber nicht. TObjectList<T> ist doch von TObjectList abgeleitet, oder? Und dann müsste ich doch mit TObjectList[0] auf das erste Element zugreifen können???
Viele Grüße
Harald