Ich versuche TObjectList-Klasse in Delphi XE8 zu erstellen, aber ich erhalte Fehler, wenn ich versuche, den Wert zu erhalten.TObjectList <> Elementfehler
Compiler-Fehlermeldung:
mein Code Hier ist: "[DCC32 Error] nicht auf privates Symbol {} System.Generics.Collections TList.GetItem zugreifen kann":
unit Unit2;
interface
uses
Classes, System.SysUtils, System.Types, REST.Types, System.JSON, Data.Bind.Components,
System.RegularExpressions, System.Variants,
Generics.Collections;
type
TTruc = class
public
libelle : string;
constructor Create(pLibelle : string);
end;
TListeDeTrucs = class(TObjectList<TTruc>)
private
function GetItem(Index: Integer): TTruc;
procedure SetItem(Index: Integer; const Value: TTruc);
public
function Add(AObject: TTruc): Integer;
procedure Insert(Index: Integer; AObject: TTruc);
procedure Delete(Index: Integer);
property Items[Index: Integer]: TTruc read GetItem write SetItem; default;
end;
implementation
{ TTruc }
constructor TTruc.Create(pLibelle: string);
begin
libelle := pLibelle;
end;
{ TListeDeTrucs }
function TListeDeTrucs.Add(AObject: TTruc): Integer;
begin
result := inherited Add(AObject);
end;
procedure TListeDeTrucs.Insert(Index: Integer; AObject: TTruc);
begin
inherited Insert(index, AObject);
end;
procedure TListeDeTrucs.Delete(Index: Integer);
begin
inherited delete(index);
end;
function TListeDeTrucs.GetItem(Index: Integer): TTruc;
begin
result := inherited GetItem(index);
end;
procedure TListeDeTrucs.SetItem(Index: Integer; const Value: TTruc);
begin
inherited setItem(index, value);
end;
end.
der Testcode lautet:
procedure TForm1.Button1Click(Sender: TObject);
var
l : TListeDeTrucs;
i : integer;
Obj : TTruc;
begin
l := TListeDeTrucs.Create(true);
l.Add(TTruc.Create('one'));
l.Add(TTruc.Create('two'));
Obj := TTruc.Create('three');
l.Add(Obj);
for i := 0 to l.count - 1 do
begin
showMessage(l[i].libelle);
end;
L.Delete(0);
l.extract(Obj);
l.Free;
end;
Wie kann ich es funktioniert?
Scheint, Sie versuchen, es falsch zu verwenden. Sie müssen keine neue Klasse erstellen, um die Funktionalität von TObjectList zu nutzen, Beispiel aus der Dokumentation heraussuchen und auf die gleiche Weise verwenden: http://docwiki.embarcadero.com/CodeExamples/XE8/en/Generics_Collections_TObjectList_%28Delphi%29 –
Ich denke Sie verstehen falsch, wie Generika funktionieren. Die Verwendung einer generischen TObjectList besteht darin, dass * nicht * für jeden Objekttyp, den Sie speichern möchten, ein neuer Abkömmling erstellt werden muss. Sie verwenden einfach 'MyTrucList: TObjectList;' als Variablendeklaration und dann 'MyTrucList: = TObjectList .Create;', um die Liste zu erstellen. Sie können dann ein 'TTruc' mit' MyTrucList.Add (TTruc.Create); 'zu der Liste hinzufügen und es mit' MyTruc: = MyTrucList [0]; 'zurückholen, ohne etwas tippen zu müssen. –
In der Tat ist dies eine einfache Struktur, aber TTruc Klasse muss viele Vars und Funktionen zur Verfügung stellen einschließlich Cascading Instantiierung von TListeDeTrucs (TListeDeTrucs verwenden TTruc als Elemente, aber jede TTruc Elemente können eine andere TListeDeTrucs instanziieren ...) Ich habe hier nur den Code geschrieben das macht das Problem nicht das ganze Projekt –