Einzelnen Beitrag anzeigen

enigma

Registriert seit: 15. Jun 2008
47 Beiträge
 
#1

Problem Typumwandlung: Attribute der Unterklasse werden nicht übernommen

  Alt 9. Jul 2024, 17:23
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;

Geändert von enigma ( 9. Jul 2024 um 17:29 Uhr)
  Mit Zitat antworten Zitat