System单元声明的TDateTime实数类型有特殊的转换规则,当TDateTime转换为任何其它类型时,它被看作Double类型;当整数、实数或布尔类型转换为TDateTime时,它先转换为Double,然后当作date-time值来读取;当一个字符串被转换为TDateTime时,它使用区域设置解释为date-time值;当Unassigned值转换为TDateTime时,它被看作实数或整数的0;把Null值转换为TDateTime会引发异常。 在Windows下,若Variant引用一个COM接口,任何对它的转换尝试都会读取它的默认属性并把它的值转换为需要的类型。若对象没有默认属性,会引发异常。
Variants in expressions(表达式中的Variant)
除了^、is和in,所有运算符都可以使用Variant作为运算数。对Variant的操作返回Variant值;若有一个运算数是Null则结果为Null;若有一个运算数为Unassigned则引发异常。在二元运算中,若只有一个运算数是Variant,则另一个被转换为Variant。
运算结果的类型由它的运算数决定。通常,适用于静态(边界)类型的规则对Variant也是有效的。比如,若V1和V2是Variant类型,分别存储整数和实数,那么V1 + V2返回一个有实数值的Variant。但是,使用Variant,你可以在二元运算中组合两个对于静态类型是不允许的值。可能的情况下,编译器使用在Variant type conversion中总结的规则转换不匹配的Variant,比如,若V3和V4(都是Variant类型)分别存储一个数字串和一个整数,表达式V3 + V4返回一个整数值Variant,在运算前,数字串被转换为整数。
- 68 -
Data types, variables and constants
Variant arrays(Variant数组)
你不能把一个普通的静态数组赋给Variant,取而代之的是,通过调用VarArrayCreate或VarArrayOf两者之一来创建Variant数组。比如,
V: Variant;
...
V := VarArrayCreate([0,9], varInteger);
它创建一个整数类型的Variant数组(长度为10)并赋给Variant V。数组被索引为V[0]、V[1],等等,但不能把数组的一个元素作为var参数。Variant数组总是使用整数作为索引。
VarArrayCreate中的第二个参数是数组基础类型的类型码,要查看这些类型码列表,参考VarType。永远不要向VarArrayCreate传递varString,要创建字符串类型的Variant数组,使用varOleStr。
Variant能存储有不同大小、维数和基础类型的Variant数组。Variant数组的元素可以是除了ShortString和AnsiString以外Variant允许的任何类型,并且,若数组的基础类型是Variant,它的元素甚至可以具有不同的类型。使用VarArrayRedim函数来更改Variant数组的大小。其它用于Variant数组的标准例程包括
VarArrayDimCount、VarArrayLowBound、VarArrayHiound、VarArrayRef、VarArrayLock和VarArrayUnlock.
当一个包含Variant数组的Variant被赋给另一个Variant或作为值参传递时,整个数组被拷贝。除非必须,否则不要使用这样的操作,因为对内存操作很低效。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-48.html
亮点在麦地路
新老板当然有些失落