Sto provando a creare la classe TObjectList in Delphi XE8, ma ottengo errori quando cerco di ottenere il valore.TObjectList <> Ottieni l'errore articolo
compilatore messaggio di errore: "[Errore dcc32]: non può accedere al simbolo privata {} System.Generics.Collections TList.GetItem"
Ecco il mio codice:
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.
il codice di prova è:
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;
Come posso farlo funzionare?
Sembra che tu stia cercando di usarlo nel modo sbagliato. Non è necessario creare una nuova classe per utilizzare le funzionalità di TObjectList, consultare l'esempio dei documenti e utilizzarli nello stesso modo: http://docwiki.embarcadero.com/CodeExamples/XE8/en/Generics_Collections_TObjectList_%28Delphi%29 –
Penso stai fraintendendo il modo in cui i farmaci generici funzionano. L'intero punto di utilizzo di una TObjectList generica è * non * necessario creare un nuovo discendente per ogni tipo di oggetto che si desidera archiviare. È sufficiente utilizzare 'MyTrucList: TObjectList;' come dichiarazione della variabile, quindi 'MyTrucList: = TObjectList .Create;' per creare l'elenco. Puoi quindi aggiungere un 'TTruc' alla lista con' MyTrucList.Add (TTruc.Create); 'e recuperarlo con 'MyTruc: = MyTrucList [0];', senza bisogno di digitare nulla. –
infatti è una struttura semplice ma la classe TTruc ha bisogno di fornire molte vars e funzioni da utilizzare tra cui l'istanziazione a cascata di TListeDeTrucs (TListeDeTruc utilizza TTruc come oggetti, ma ogni oggetto TTruc può instanciare un altro TListeDeTrucs ...) ho appena scritto qui il codice che rende il problema non l'intero progetto –