Ich verwende Delphi 2007, um ein altes Projekt beizubehalten. Ich habe ein Problem beim Zugriff auf Klassenkonstanten von einer Klassenreferenzvariablen. Ich erhalte immer die Elternklassenkonstante anstelle der untergeordneten .Zugriff auf Klassenkonstanten aus einer Klassenreferenzvariablen in Delphi
Angenommen, eine übergeordnete Klasse, einige untergeordnete Klassen, eine Klassenreferenz und schließlich ein const-Array zum Speichern der Klassenreferenzen für Schleifenzwecke.
einen Blick auf folgende einfache Programm:
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.
Wenn es läuft, erhalte ich:
looping through class reference array
TChild1 -> BASE CLASS
TChild2 -> BASE CLASS
accessing classes directly
TChild1 -> CHILD 1
TChild2 -> CHILD 2
I 'KIND 1' und 'KIND 2' auch in Array-Schleife zu sehen erwartet hatte!
Kann mir jemand erklären, warum es nicht mit Klassenbezug funktioniert?
Sie benötigen eine virtuelle Methode Polymorphismus zu implementieren . . – kludg