Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.315 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wertezuweisung an Array der Oberklasse klappt separat, aber nicht als Prozedur

  Alt 11. Jul 2024, 14:12
Alternativ könnte man auch auf eine Lösung mit Generics setzen:
Delphi-Quellcode:
type
  TOberklasse = class

  end;

  TUnterklasse = class(TOberklasse)

  end;

var
  cArray: Array[0..3] of TUnterklasse;
  dynArray: TArray<TOberklasse>;

type
  { Da globale generische Methoden nicht erlaubt sind, brauchen wir einen Container. }
  TArrayTools = record
  public
    { Der zweite generische Parameter TSource ist hier als kompatibel zum ersten Parameter T deklariert.
      Damit ist sichergestellt dass die Zuweisung zulässig ist.
      Da das Target-Array eh neu erzeugt wird, halte ich eine function für zweckmäßiger. }

    class function SetArray<T: class; TSource: T>(const ASource: array of TSource): TArray<T>; static;
  end;

class function TArrayTools.SetArray<T,TSource>(const ASource: array of TSource): TArray<T>;
begin
  SetLength(Result, Length(ASource));
  for var I := 0 to Length(ASource) - 1 do
    Result[I] := ASource[I];
end;

procedure Test();
begin
  dynArray := TArrayTools.SetArray<TOberklasse,TUnterklasse>(cArray);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat