Тип данных variant часто используется тогда, когда тип какого то объекта ранее не известен или когда какие-то функции или процедуры требуют именно тип аргументов — variant. Однако следует знать, что затраты памяти и времени на работу с типом variant больше, чем с обычными типами.
В переменных типа данных variant могут храниться данные любых типов данных, кроме записей, множеств, статических массивов, файлов, классов или ссылок на классы и Int64 (-263/263-1). Объекты Com и Cobra также могут храниться в типе variant.
Переменные типа variant занимают 16 битов и содержат код типа и значения переменной или указатель на это значение. В момент создания эти переменные инициализируются специальным значением Unassigned. Значение переменной nil свидетельствует о неизвестном или ошибочном значении переменной. Вы можете заказать мощный и надежный сервер lenovo nextscale n1200 по оптимальной и доступной цене.
Узнать действительный тип значения переменной variant можно при помощи функции VarType, возвращающей значение поля VarType записи типа TvarData (модуль System), содержащее код типа переменной variant. Имеется также предопределенная константа varTypeMask, сложение при которой по операции and с переменной типа TVarData возвращает истинный тип переменной. Например:
VarType(V) and varTypeMask = varDouble
вернет true, если в переменной V в данный момент хранится значение типа double или массив значений double.
Некоторые значения типов, возвращаемые функцией VarType:
Константа |
Численное значение |
Тип |
varEmpty |
$0000 |
Unassigned |
varNull |
$0001 |
null |
varInteger |
$0003 |
Integer |
varSingle |
$0004 |
Single |
varDouble |
$0005 |
Double |
varOLEstr |
$0008 |
Ссылка на динамически размещенную строку UNICODE |
varWord |
$0012 |
Word |
varString |
$0100 |
Ссылка на динамически размещенную строку в стиле Pascal |
varAny |
$0101 |
Тип Cobra |
varTypeMask |
$0FFF |
Битовая маска для извлечения кода типа |
varArray |
$2000 |
Бит, устанавливаемый при ссылке на массив variant |
varByRef |
$4000 |
Бит, устанавливаемый при ссылке на тип variant |