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. Обратите внимание, что, когда массив содержит строку, она не считается "массивом символов" и потому вариантная запись не может быть проиндексирована для получения символа в определенной позиции в строке. |