Hallo Delphi Community,
ich habe ein Problem mit der Typumwandlung eines Objekts der Oberklasse in ein Objekt der Unterklasse.
Dabei werden in meinem Programm die Werte der Attribute der Unterklasse nicht übernommen, s.u.
Vielen Dank für eure Tipps.
Delphi-Quellcode:
//Kernmethode, Einzelheiten s.u.
function TDN.getArrTest(aiObjDN: TDN): TDoubleDynArray;
lObjDN: TDN;
if aiObjDN is TDNX then
lObjDN := aiObjDN as TDNX;
lObjDN.setBps;
ShowMessage('lObjDN.getBez = ' + lObjDN.getBez); [COLOR="Red"]//klappt mit "procedure setBps; virtual; abstract;" in TDN[/COLOR]
ShowMessage('lObjDN.Bez = ' + lObjDN.Bez); [COLOR="Red"]//dieses Attribut ist nicht belegt, da es von TDNX nicht übernommen wurde.[/COLOR]
[COLOR="red"]//arrBps[0].Bez ist nicht verfügbar, da in TDN gilt: "arrBps: array of TDN;" und TDN kein Attribut „Bez: String“ enthält.
[/COLOR] ShowMessage('lObjDN.arrBps[0].Bez = ' + lObjDN.arrBps[0].Bez;
end;
TDN = class(TDocClass)
var
Bez: String;
arrBps: array of TDN; //in arrBps: Array[0..cAnzBps-1] of TDNXY;
procedure setBps; virtual; abstract;
function getArrTest(aiObjDN: TDN): TDoubleDynArray;
end;
TDNX = class(TDN)
const cAnzBps = 3;
var
Bps1, Bps2, Bps3: TDNXY;
Bez: String;
arrBps: Array[0..cAnzBps-1] of TDNXY;
procedure setBps; override;
end;
TDNXY = class(TDNX)
constructor TDNX.Create;
begin
inherited;
Bez := ‘TDNX';
end;
procedure TDNX.setBps;
begin
Bps1 := TDNXY.Create(cRecBps1);
Bps2 := TDNXY.Create(cRecBps2);
Bps3 := TDNXY.Create(cRecBps3);
arrBps[0] := Bps1;
arrBps[1] := Bps2;
arrBps[2] := Bps3;
end;