Я использую Delphi 2007 для поддержки старого проекта, у меня есть проблема с доступом к константам класса из переменной Reference класса, я получаю всегда постоянную родительского класса вместо дочерних ,Доступ к константам класса из ссылочной переменной класса в Delphi
Предположим, что родительский класс, некоторые дочерние классы, ссылка на класс и, наконец, массив const для хранения ссылок на классы для целей цикла.
посмотрит на следующей простую программу:
program TestClassConst;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TParent = class
const
ClassConst = 'BASE CLASS';
end;
TChild1 = class(TParent)
const
ClassConst = 'CHILD 1';
end;
TChild2 = class(TParent)
const
ClassConst = 'CHILD 2';
end;
TParentClass = class of TParent;
TChildClasses = array[0..1] of TParentClass;
const
ChildClasses: TChildClasses = (TChild1, TChild2);
var
i: integer;
c: TParentClass;
s: string;
begin
try
writeln;
writeln('looping through class reference array');
for i := low(ChildClasses) to high(ChildClasses) do begin
c := ChildClasses[i];
writeln(c.ClassName, ' -> ', c.ClassConst);
end;
writeln;
writeln('accessing classes directly');
writeln(TChild1.ClassName, ' -> ', TChild1.ClassConst);
writeln(TChild2.ClassName, ' -> ', TChild2.ClassConst);
except
on E: Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
Когда он работает, я получаю:
looping through class reference array
TChild1 -> BASE CLASS
TChild2 -> BASE CLASS
accessing classes directly
TChild1 -> CHILD 1
TChild2 -> CHILD 2
Я ожидал увидеть «РЕБЕНКА 1» и «РЕБЕНОК 2» также в цикле массива!
Может ли кто-нибудь объяснить мне, почему это не работает с ссылкой на класс?
Вам нужен виртуальный метод для реализации полиморфизма , . – kludg