Вызов метода объекта 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;
Затем у меня есть процедура, в которой я хочу создать TList объекта T_Test и вызвать для них функцию метода 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;
Но я продолжаю получать an, который говорит, что я должен использовать Record, Object или Class Type при вызове listTest[i].showInt.
Кто-нибудь знает, как вызвать этот метод?
2 ответа
Приведите указатель listTest[i] обратно к T_Test и затем вызовите его метод:
T_Test(listTest[i]).showInt;
В качестве альтернативы, если доступно, используйте шаблонный класс TObjectList для непосредственного хранения экземпляров T_Test.
Ответ Мартина правильный. Но стоит отметить, что если вы добавляете разные классы в свой список, более надежный фрагмент кода будет...
var pMmember: pointer;
pMember := listTest[i];
if TObject( pMember) is T_Test then
T_Test( pMember).ShowInt;
Точка зрения Мартина о TObjectList довольно верна. Другим вариантом для рассмотрения будет TList
Замечу, что вы не инициализировали значение i. Итак, фрагмент выше притворяется, что ты это сделал. Если вы также хотите проверить, что переменная индекса имеет допустимое значение, и не вызывать ShowInt, если она недействительна, то вы можете сделать что-то вроде этого...
if (i >= 0) and (i < listTest.Count) and (TObject(listTest[i]) is T_Test) then
T_Test(listTest[i]).ShowInt;
Приведенный выше фрагмент кода основан на логической оценке короткого замыкания.