System.Variant
Delphi
type Variant = { built-in type };
C++
class RTL_DELPHIRETURN Variant: public TVarData
Inhaltsverzeichnis
Eigenschaften
Typ | Sichtbarkeit | Quelle | Unit | Übergeordnet |
---|---|---|---|---|
type class |
public | System.pas sysvari.h |
System | System |
Beschreibung
Wird für Variablen verwendet, die ihren Typ zur Laufzeit ändern können.
Der Typ Variant wird für Variablen verwendet, die ihren Typ zur Laufzeit ändern können. Varianten bieten eine große Flexibilität, brauchen aber mehr Arbeitsspeicherplatz als normale Variablen, und Operationen mit Varianten werden deutlich langsamer als mit statisch typisierten Werten ausgeführt. Außerdem führen unzulässige Operationen, die bei regulären Variablen während des Compilierens bereinigt werden, bei Varianten oft zu Laufzeitfehlern. Sie können auch benutzerdefinierte variante Typen erstellen.
Variant-Variablen können zur Laufzeit die verschiedensten Typen aufnehmen. Records, Mengen, statische Arrays, Dateien, Klassen, Klassenreferenzen und Zeiger sind jedoch standardmäßig nicht zulässig. Varianten können also Werte beliebigen Typs mit Ausnahme von strukturierten Typen und Zeigern enthalten. Wenn Varianten Interfaces enthalten, kann über diese auf ihre Methoden und Eigenschaften zugegriffen werden. Varianten können auch dynamische Arrays und variante Arrays (ein spezieller Typ von statischen Arrays) aufnehmen Ein Variant kann mit anderen Variant- sowie mit Integer-, Real-, string- und Boolean-Werten zusammen in einem Ausdruck oder einer Zuweisung benutzt werden; der Compiler führt die Typumwandlung automatisch aus.
Varianten, die Strings enthalten, können nicht indiziert werden.
Sie können benutzerdefinierte Varianten definieren, wodurch der Typ Variant beliebige Werte enthalten kann. So können Sie beispielsweise einen Varianten-String-Typ definieren, der die Indizierung ermöglicht oder der bestimmte Klassenverweise, Record-Typen oder statische Arrays enthält. Benutzerdefinierte Variantentypen lassen sich definieren, indem Sie Nachkommen der Klasse TCustomVariantType erstellen.
Auf 32-Bit-Plattformen belegt eine Variante 16 Byte Speicher. Auf 64-Bit-Plattformen ist eine Variante ein 24-Byte-Record. Ein varianter Record besteht aus einem Typcode und einem Wert (bzw. einem Zeiger auf einen Wert), dessen Typ durch den Typcode festgelegt ist. Siehe Interne Darstellung der varianten Typen. Alle Varianten werden bei der Erstellung mit dem speziellen Wert Unassigned initialisiert. Der Wert Null steht für unbekannte oder fehlende Daten.