Тип данных Variant. Основные функции. Где он применяется. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тип данных Variant. Основные функции. Где он применяется.



(16байт-большаяJ)

Иногда бывает необходимо обрабатывать данные, тип которых на этапе компиляции не известен. В этом случае выходом может служить использование типа Variant. Этот тип представляет такие значения, тип которых может изменяться на этапе выполнения программы.

Тип Variant предоставляет большую гибкость, однако поглощает больше памяти по сравнению с соответствующими переменными и операции над данными типа Variant выполняются медленнее.

Более того, недопустимые операции над данными этого типа чаще приводят к ошибкам на этапе выполнения программы, в то время как подобные ошибки над данными другого типа были бы выявлены еще на этапе компиляции программы.

Variant может содержать данные любого типа, за исключением:

· структурных типов;

· указателей;

· Int64 (начиная с Delphi 6 – может).

В Delphi 6.0 вариант может включать такие типы (приведенные константы описаны в модуле System):

const

varEmpty = $0000;

varNull = $0001;

varSmallint = $0002;

varInteger = $0003;

varSingle = $0004;

varDouble = $0005;

varCurrency = $0006;

varDate = $0007;

varOleStr = $0008;

varDispatch = $0009;

varError = $000A;

varBoolean = $000B;

varVariant = $000C;

varUnknown = $000D;

varShortInt = $0010;

varByte = $0011;

varWord = $0012;

varLongWord = $0013;

varInt64 = $0014;

varStrArg = $0048;

varString = $0100;

varAny = $0101;

varTypeMask = $0FFF;

varArray = $2000;

varByRef = $4000;

Этот тип может содержать COM и CORBA объекты, чьи методы и свойства могут быть доступны посредством этого типа.

Также тип Variant может содержать динамические массивы и специфический вид статических массивов, называемых вариантными массивами (variant array).

Variant можно смешивать (в выражениях и операторах) с другими вариантами, числовыми, строковыми и булевскими данными. При этом компилятор автоматически выполняет преобразование типа.

Варианты, содержащие строки, не могут, однако, индексироваться (V[i} не допустимо).

Вариант занимает 16 байт памяти и включает код типа и значение или указатель на данные того типа, на который указывает код типа.

На этапе создания вариант инициализируется специальным значением Unassigned. Другое специальное значение – Null – указывает на неизвестные или отсутствующие данные (unknown or missing data).

Стандартная функция VarType возвращает код типа, представленного в варианте. Каждый код типа представлен своей (16-битовой) константой. Константа var TypeMask =$0FFF предназначена для извлечения кода, возвращаемого VarTyp e. Например, выражение

(VarType(V) and varTypeMask) = varDouble

будет иметь значение true, если V содержит данное типа Double или массив Doubl e. Маска varTypeMask просто скрывает 13-й бит (строго говоря, четыре старших бита), который указывает на массив.

В модуле System определен также тип-запись TVarData, с помощью которого можно получить доступ к внутреннему представлению данных в типе Variant.

В Delphi 6.0 имеется модуль Variants, содержащий ряд подпрограмм для работы с данными типа Variant.

Преобразования типа Variant.

Как было сказано выше, типы integer, real, string, character и Boolean (за исключением Int6 4) являются совместимыми по присваиванию с типом Varian t. Тип выражения может быть явно приведен к типу Variant. Для изменения внутреннего представления варианта может быть использована подпрограмма
VarAsType:

Function VarAsType(const V: Variant; VarType: TVarType): Variant;

Следующий код иллюстрирует использование вариантов и некоторые автоматические преобразования типов при смешивании вариантов с другими типами.

var

V1, V2, V3, V4, V5: Variant;

I: Integer;

D: Double;

S: string;

begin

V1:= 1; { integer value }

V2:= 1234.5678; { real value }

V3:= 'Hello world!'; { string value }

V4:= '1000'; { string value }

V5:= V1 + V2 + V4; { real value 2235.5678}

I:= V1; { I = 1 (integer value) }

D:= V2; { D = 1234.5678 (real value) }

S:= V3; { S = 'Hello world!' (string value) }

I:= V4; { I = 1000 (integer value) }

S:= V5; { S = '2235.5678' (string value) }

end;

Компилятор выполняет преобразования типов по правилам, приведенным в следующей таблице.

Table 5.7 Variant type conversion rules

Присваивание переменной значения вне диапазона допустимых для ее типа значений часто приводит к тому, что переменная получает максимально возможное значение. Недопустимые присваивания или приведения типа вызывают ошибку (исключительную ситуацию) EVariantError.

Специальные правила преобразования применяются к типу TDateTime (вещественный тип double).

Когда тип TDateTime преобразуется к любому другому типу, он трактуется просто как вещественный. Когда какой-либо числовой или булевский тип преобразуется к типу TDateTim e, он сначала приводится к типу double, а затем читается так же, как тип TDateTim e.



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 217; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 54.226.126.38 (0.004 с.)