3.7.1 Определение

Вверх  Предыдущий  Следующий

Начиная с версии 1.1, в FPC введена поддержка типа variants. Для получения максимальной поддержки variant нужно добавить модуль variants в секцию uses каждого модуля который его использует: Модуль variants содержит поддержку просмотра и преобразования типа variant, кроме поддержки, предлагаемой по умолчанию модулями System или ObjPas.

Тип значения, хранящегося в переменной variant определяется во время выполнения: он зависит от того, что было ей присвоено. Почти любой простой тип может быть присвоен вариантной переменной: порядковые типы, строковые типы, тип Int64.

Структурированные типы, такие как множества, записи, массивы, файлы, объекты и классы не совместимы с типом variant, в отличии от указателей. Интерфейсы и COM или CORBA объекты могут быть присвоены вариантной переменной (в основном потому, что они просто являются указателями).

Это означает, что допустимы следующие присвоения:

Type

TMyEnum = (One,Two,Three);

 

Var

V : Variant;

I : Integer;

B : Byte;

W : Word;

Q : Int64;

E : Extended;

D : Double;

En : TMyEnum;

AStr : AnsiString;

WS : WideString;

begin

V:=I;

V:=B;

V:=W;

V:=Q;

V:=E;

V:=En;

V:=D:

V:=AStr;

V:=WS;

end;

Обратные присвоения, конечно, также верны.

Вариантная переменная может содержать массив значений: Все элементы массива имеют одинаковый тип (но они могут быть типа 'variant'). Для вариантной переменной, которая содержит массив, вариант может быть проиндексирован:

Program testv;

 

uses variants;

 

Var

A : Variant;

I : integer;

begin

A:=VarArrayCreate([1,10],varInteger);

For I:=1 to 10 do A[I]:=I;

end.

Для объяснения VarArrayCreate см. описание модуля variants.

Обратите внимание, что, когда массив содержит строку, она не считается "массивом символов" и потому вариантная запись не может быть проиндексирована для получения символа в определенной позиции в строке.