我正在尝试在Delphi XE8中创建TObjectList类,但是在尝试获取该值时出现错误。



这是我的代码:

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.

测试代码是:
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;

我该如何运作?

最佳答案

好吧,GetItemSetItem确实是私有(private)的。您的代码看不到它们。私有(private)成员只能在声明其的单位中看到。您需要使用至少 protected 成员。

编译如下:

function TListeDeTrucs.GetItem(Index: Integer): TTruc;
begin
  Result := inherited Items[Index];
end;

procedure TListeDeTrucs.SetItem(Index: Integer; const Value: TTruc);
begin
  inherited Items[Index] := Value;
end;

在这种情况下,您的类是没有意义的,因为您的类中的任何方法都不会改 rebase 类的行为。但是,您的真实类会做得更多。

关于class - TObjectList <>获取项目错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29870105/

10-11 07:45