gpt4 book ai didi

class - TObjectList<> 获取项目错误

转载 作者:行者123 更新时间:2023-12-03 14:58:43 27 4
gpt4 key购买 nike

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

compiler error message: "[dcc32 Error] : can't access to private symbol {System.Generics.Collections}TList.GetItem"

这是我的代码:

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)做得更多。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com