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;