Manchmal will man absichtlich unterschiedliche, nicht zuweisungskompatible Typen haben,
z.B. wenn du eine überladene Methode für zwei solcher Typen hast.
Aber ansonsten ist es super, weil du überall ein TArray<Byte> oder TArray<string> schreiben kannst,
und dieser Typ auch mit Typen und Methoden in anderen Units (vorallem Fremdkomponenten) kompatibel ist.
Beispiel TBytes von Delphi vs. dem absolut inkompatiblen Bytes-Array von
Indy.
Oder lange Zeit das TStringDynArray von Delphi, was inzwischen als TArray<string> deklariert ist.
Für String und Byte hat Delphi schon ewig vordefinierte Array-Typen, welche aber nicht von allen Entwicklern genutzt wurden (z.B.
Indy) und man dann Probleme hatte, sowas zwischen zwei Komponenten/Codes durchzureichen.
Aber für viele Typen gab es auch keine Vordefinierten, womit Jeder seinen eigenen Typen deklarieren musste, welche ohne TArray<T> nicht miteinander arbeiten will.