欢迎来到天天文库
浏览记录
ID:33591265
大小:49.00 KB
页数:8页
时间:2019-02-27
《delphi variant变量的使用技巧》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、DELPHIVariant变量的使用技巧。。。。。。delphi为了完全支持OLE,32位Delphi增加了Variant数据类型,本节将从宏观角度来分析这种数据类型。实际上,Variant类型对Pascal语言有普遍而深入的影响,Delphi控件库中与OLE无关的地方也使用到这种类型。Variant变量没有类型一般说来,你可以用Variant变量存储任何数据类型,对它执行各种操作和类型转换。需要注意的是:这违反了Pascal语言的一贯原则,有悖于良好的编程习惯。variant变量的类型检查和计算在运行期间才进行,编译器不会提示代码中的潜在错误,这些错误在进一步测试中才能发现
2、。总之,你可以认为包含variant变量的代码是解释性代码,正如解释性代码一样,许多操作直到执行时才能知道,这对代码运行速度会有很大的影响。上面对Variant类型的使用提出了警告,现在来看看Variant类型究竟能干什么。基本上说,如果声明了一个variant变量:varV:Variant;你就可以把各种不同类型的值赋给它:V:=10;V:='Hello,World';V:=45.55;一旦得到一个variant值,你可以把它拷贝给任何兼容或不兼容的数据类型。如果你把值赋给不兼容的数据类型,Delphi会力尽所能进行转换,无法转换则颁布一个运行时间错误。实际上,varian
3、t变量中不仅包含了数据还包含有类型信息,并允许一系列运行时间操作,这些操作很方便,但运行速度慢且安全性差。见例VariTest,它是上面代码的扩展。窗体上有三个编辑框,一对按钮,第一个按钮的OnClick事件代码如下:procedureTForm1.Button1Click(Sender:TObject);varV:Variant;beginV:=10;Edit1.Text:=V;V:='Hello,World';Edit2.Text:=V;V:=45.55;Edit3.Text:=V;end;很有趣是不是?你可以把一个值为字符串的variant变量赋给编辑框Text属性,还
4、可以把值为整数或浮点数的variant变量赋给Text属性。正如你在图10.1中所看到的,一切正常。(图10.1)按Assign按钮后,例VariTest的输出结果图10.1:例VariTest的Assign按钮Click事件输出结果更糟糕的是:你还可以用variant变量计算数值,从第二个按钮的Click事件代码就可看到这一点:procedureTForm1.Button2Click(Sender:TObject);varV:Variant;N:Integer;beginV:=Edit1.Text;N:=Integer(V)*2;V:=N;Edit1.Text:=V;end
5、;至少这种代码带有一定危险性,如果第一个编辑框包含了一个数字,那么一切运行正常;如果不是,将会引发异常。这里再重申一遍,如果不到万不得以,不要随便使用Variant类型,还是应坚持使用传统的Pascal数据类型和类型检查方法。在Delphi和VCL中,variant变量主要是用于OLE支持和数据库域的访问。Variant类型内部结构Delphi中定义了一个variant记录类型,TVarData,它与Variant类型有相同的内存布局。你可以通过TVarData访问variant变量的实际类型。TVarData结构中包含了Variant类型信息(由Vtype域表示)、一些保留
6、域及当前值。VType域的取值包括OLE自动化中的所有数据类型,这些类型通常叫OLE类型或variant类型。以下是variant类型的完整列表,按字母顺序排列:varArrayvarBooleanvarByRefvarCurrencyvarDatevarDispatchvarDoublevarEmptyvarErrorvarIntegervarNullvarOleStrvarSinglevarSmallintvarStringvarTypeMaskvarUnknownvarVariant你可以在Delphi帮助系统的variants主题下找到这些类型的说明。还有许多操作va
7、riant变量的函数,你可以用它们进行特定的类型转换,或通过它们获取variant变量的类型信息(例如VarType函数),当你用variant变量写表达式时,Delphi会自动调用这些类型转换和赋值函数。另外还有操作variant数组的例程,你可以通过帮助文件的Variantsupportroutines主题了解相关内容。Variant类型运行很慢!Variant类型代码运行很慢,不仅数据类型转换如此,两个值为整数的Variant变量相加也是如此。它们几乎跟VisualBasic这种解释性代码一样慢!
此文档下载收益归作者所有