Wenn du es als type außerhalb definierst hast du es innerhalb leichter.
Ja,
array of ...
deklariert jedes mal einen neuen Typ und untereinander sind diese Typen nicht zuweisungskompatibel,
Den fertigen Typ vorher deklariert, löst Propbleme, bezüglich der Kompatibilität.
Für String, Byte und Anderes gibt es bereits vordefinierte Typen, ala TBytes oder TStringDynArray.
ABER der generische Type TArray<> ist hier eine Ausnahme, da der Compiler alle TArray<> vom selben Typ im Programm gleichzieht.
Delphi-Quellcode:
// siehe System.pas
type
TArray<T> = array of T;
Ja, SetLength will eine Variable, aber das ist ja ein Property.
Du mußt das also in der Klasse machen,
oder kein Property verwenden, sondern das Feld/Variable "FMeinArray" ins Public.
Delphi-Quellcode:
public
function Length: Integer;
procedure SetLength(Len: Integer;)
property Items[Index: Integer] : AndereKlasse read GetItem write SetItem; default; // kann auch sein, dass ohne das ; vor dem default
end;
oder
Delphi-Quellcode:
public
property Length: Integer read GetLength write SetLength;
property Items[Index: Integer] : AndereKlasse read GetItem write SetItem; default;
end;
PS: DEFAULT;
Dann geht auch
MeineKlasse1[123]
anstatt
MeineKlasse1.MeinArray[123]
.
Ja, die Default-Directive hat bei Array-Property eine andere Bedeutung, wie für normale Property.
PSS:
Delphi-Quellcode:
TMeineKlasse1 = class(TObjectList<AndereKlasse>)
private
public
end;
// oder wenn ohne eigenen Code
TMeineKlasse1 = TObjectList<AndereKlasse>;