delphi tlist对象方法调用

时间:2012-08-18 08:40:05

标签: delphi tlist

所有

在Delphi中,我创建了一个名为T_Test的简单类(见下文)。

T_Test = class(TObject)

private

 F_Int : Integer;

public

  constructor Create(inInt: Integer);
  destructor Destroy; override;

  property Int: Integer read F_Int write F_Int;

  function showInt : String;


end;

constructor T_Test.Create(inInt: Integer);

 begin

  F_Int := inInt;

 end;


destructor T_Test.Destroy;

 begin

  self.Free;

 end;


function T_Test.showInt : String;

 var outputLine : String;


 begin

   result := IntToStr(Int);
   outputLine := result;
   Form1.Memo1.Lines.Add(outputLine);

 end;

然后我有一个程序,我想在其中创建T_Test对象的TList并调用 showInt方法函数就可以了。

我试过这样:

procedure testTlist;

 var

  a, b: T_Test;
  i : Integer;

 begin

  a := T_Test.Create(5);
  b := T_Test.Create(10);

 listTest := TList.Create;

 listTest.Add(a);
 listTest.Add(b);


 listTest[i].showInt;


end;

但我不断得到一个说我必须使用记录,对象或类类型的 调用'listTest [i] .showInt'

有谁知道如何调用此方法?

2 个答案:

答案 0 :(得分:4)

将listTest [i]指针强制转换回T_Test,然后调用其方法:

T_Test(listTest[i]).showInt;

或者,如果可用,使用模板化的TObjectList类直接存储T_Test实例。

答案 1 :(得分:2)

马丁的回答是正确的。但值得注意的是,如果你可能在列表中添加不同的类,那么更强大的代码片段就是......

var pMmember: pointer;

pMember := listTest[i];
if TObject( pMember) is T_Test then
  T_Test( pMember).ShowInt;

Martin关于TObjectList的观点是安静的。另一个需要考虑的选择是TList< T_Test>。 David对析构函数中的错误的评论也是正确的。

我注意到你没有初始化i的值。所以上面的片段假装你做了。如果您还想检查索引变量是否为有效值,并且如果它无效则不调用ShowInt,那么您可以执行以下操作...

if (i >= 0) and (i < listTest.Count) and (TObject(listTest[i]) is T_Test) then
  T_Test(listTest[i]).ShowInt;

上面的代码片段依赖于短路布尔评估。