Pascal - Varianten
Pascal unterstützt einen einzigartigen Speichertyp namens Varianten. Sie können in einer Variantenvariablen einen beliebigen einfachen Wertetyp zuweisen. Der Typ eines in einer Variante gespeicherten Wertes wird nur zur Laufzeit ermittelt. Fast jeder einfache Typ kann Varianten zugeordnet werden: Ordinaltypen, Zeichenfolgentypen, int64-Typen.
Strukturierte Typen wie Mengen, Datensätze, Arrays, Dateien, Objekte und Klassen sind mit einer Variante nicht zuweisungskompatibel. Sie können einer Variante auch einen Zeiger zuweisen.
Free Pascal unterstützt Varianten.
Eine Variante deklarieren
Sie können den Variantentyp wie alle anderen Typen mit dem deklarieren varStichwort. Die Syntax zum Deklarieren eines Variantentyps lautet -
var
v: variant;
Diese Variantenvariable v kann nun fast allen einfachen Typen zugeordnet werden, einschließlich der aufgezählten Typen und umgekehrt.
type
color = (red, black, white);
var
v : variant;
i : integer;
b : byte;
w : word;
q : int64;
e : extended;
d : double;
en : color;
as : ansistring;
ws : widestring;
begin
v := i;
v := b;
v := w;
v := q;
v := e;
v := en;
v := d:
v := as;
v := ws;
end;
Beispiel
Das folgende Beispiel würde das Konzept veranschaulichen -
Program exVariant;
uses variants;
type
color = (red, black, white);
var
v : variant;
i : integer;
r: real;
c : color;
as : ansistring;
begin
i := 100;
v:= i;
writeln('Variant as Integer: ', v);
r:= 234.345;
v:= r;
writeln('Variant as real: ', v);
c := red;
v := c;
writeln('Variant as Enumerated data: ', v);
as:= ' I am an AnsiString';
v:= as;
writeln('Variant as AnsiString: ', v);
end.
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
Variant as Integer: 100
Variant as real: 234.345
Variant as Enumerated data: 0
Variant as AnsiString: I am an AnsiString