2016-12-20 4 views
1

Ich habe mehrmals die Antworten in this Frage über die TArray<T> und die array of T gelesen. Von dem, was ich die Verwendung der ersten verstanden haben vielseitiger als das letztere, weil für ein dynamisches Array ich wie eine Art erklären sollte ...Delphi generische Klassen und dynamische Arrays

type 
    TMyFlexibleArray = array of Integer; 

..., was benötigt wird (in bestimmten Fällen), weil ich kann zum Beispiel kein array of Integer zurückgeben. Stattdessen kann ich natürlich einen generischen Typ zurückgeben. Dynamische Arrays haben keine feste Länge, und Speicher für sie wird mit der SetLength-Prozedur neu zugewiesen. TArray ist eine generische Klasse mit statischen Methoden; die Dokumentation über sie heißt es:

Sie keine Instanzen dieser Klasse erstellen sollte, weil sein nur Zweck Art zur Verfügung zu stellen und statische Methoden zu suchen.


Sie haben zwei unterschiedliche Naturen/Funktionen aber haben sie das gleiche Ergebnis (zum Beispiel, wenn sie als Parameter übergeben oder, wenn ich nur einen flexiblen Behälter müssen)? Ich sehe, dass TArray auch eine nützliche Methode hat.

Ist es korrekt, wenn ich sage, dass TArray<T> ist ein dynamisches Array mit Generics gebaut und type K = array of T ist eine eigene dynamische Array (eine benutzerdefinierte)? In meiner Frage gehe ich davon aus, dass sie in ihrer Funktion, dynamische Arrays zu sein, gleichwertig sind (und ich bevorzuge den generischen Weg nur für Komfort).

+1

Das einzige wirkliche Szenario, in dem ich denke, dass Sie zwischen ihnen wählen müssen, ist (zum Beispiel) wenn Sie Delphi 5 verwenden, weil es einfach keine Generika hat. In neueren Versionen können Sie beide verwenden und haben den gleichen Effekt. Ein Teil davon, ich bevorzuge die Verwendung der TArray , aber es ist nur meine Wahl –

+2

Ich verstehe nicht, warum Sie bringen [System.Generics.Collections.TArray] (http://docwiki.embarcadero.com/Libraries/en/ System.Generics.Collections.TArray) in Ihre Frage ein. Das ist eine Klasse, nicht zu verwechseln mit dynamischen Arrays (generisch oder nicht). –

Antwort

7

Generische dynamische Arrays und nicht generische dynamische Arrays sind in jeder Hinsicht identisch, abgesehen von ihrer allgemeinen oder anderen Natur. Das ist der einzige Unterschied.

Dieser Unterschied fördert die Entscheidungsfindung in den wenigen Szenarien, in denen das eine verwendet werden kann, das andere jedoch nicht. Beispiel:

  • Aus Gründen, die in Ihrer Frage beschrieben sind, sind manchmal generische Arrays erforderlich, wenn Sie mit generischen Typen arbeiten.
  • Wenn Sie andererseits Code schreiben, den Sie auf alten Compilern kompilieren möchten, die vor Generika vorliegen, können Sie keine generischen Arrays verwenden.

Wenn dies offensichtlich scheint, ist das, weil es ist. Es gibt wirklich nur diesen einen Unterschied zwischen generischen und nicht-generischen Arrays.


Sie erwähnen auch die Klasse TArray von System.Generics.Collections. Das ist eine statische Klasse, die Methoden zum Suchen und Sortieren von Arrays enthält. Es unterscheidet sich völlig von allen dynamischen Array-Typen und ist hier etwas abgelenkt. Obwohl die Namen ähnlich sind, TArray<T> und TArray sind dies ganz andere Dinge. Ignoriere TArray für den Zweck dieser Frage.