vb变量、常数和数据类型及过程概述(五)

Object 数据类型
Object 变量作为 32 位(4 个字节)地址来存储,该地址可引用应用程序中或某些其它应用程序中的对象。可以随后(用 Set 语句)指定一个被声明为 Object 的变量去引用应用程序所识别的任何实际对象。
Dim objDb As Object
Set objDb = OpenDatabase ("c:\Vb5\Biblio.mdb")
在声明对象变量时,请试用特定的类,而不用一般的 Object(例如用 TextBox而不用 Control,或者像上面的例子那样,用 Database 取代 Object)。运行应用程序之前,Visual Basic 可以决定引用特定类型对象的属性和方法。因此,应用程序在运行时速度会更快。在“对象浏览器”中列举了特定的类。
当使用其它应用程序的对象,并在“对象浏览器”中的“类”列表中列举对象时,不要用 Variant 或一般的 Object,而应声明对象。这样可确保 VisualBasic 能够识别引用的特定类型对象,在运行时解决引用问题。
详细信息 关于创建和指定对象以及对象变量的更详细信息,请参阅本章后面的“创建对象”部分。

转换数据类型
Visual Basic 提供了几种转换函数,可用来将值转换成特定数据类型。例如,用 CCur 函数将值转换成 Currency 类型: PayPerWeek = CCur (hours * hourlyPay)

注意 对目标数据类型,传递到转换函数的值必须是有效的,否则会发生错误。例如,如果想把 Long 型数转换成 Integer 型数,那么,Long 型数必须在 Integer 数据类型的有效范围之内。
详细信息 在联机帮助中查找指定的转换函数。

Variant 数据类型
Variant 变量能够存储所有系统定义类型的数据。如果把它们赋予 Variant 变量,则不必在这些数据的类型间进行转换; Visual Basic 会自动完成任何必要的转换。例如:
Dim SomeValue '缺省为 Variant。
SomeValue = "17" 'SomeValue包含 "17"(双字符的串)。
SomeValue = SomeValue - 15 '现在, SomeValue 包含数值 2。
SomeValue = "U" & SomeValue '现在, SomeValue 包含 "U2" (双字符的串)。
不必过多关注 Variant 变量中数据的类型就可对 Variant 变量进行操作,但须避免落入陷阱。
1.如果对 Variant 变量进行数学运算或函数运算,则 Variant 必包含某个数。更详细的信息,请参阅《联机手册》中“高级变量主题”中的“变量中存储的 Numeric 值”部分。
2.如果正在连接两个字符串,则用 " & " 操作符而不用 " + " 操作符。更详细的信息,请参阅《联机手册》中“高级变量主题”中的“Variant 变量中存储的 Strings”部分。
除了可以像其它标准数据类型一样操作外,Variants 还包含三种特定值:Empty,Null 和 Error。

Empty 值
有时需要知道是否已将一个值赋予所创建的变量。在赋值之前,Variant 变量具有值 Empty。值 Empty 是异于0、零长度字符串 ("") 或 Null 值的特定值。可用 IsEmpty 函数测试 Empty 值:
If IsEmpty (Z) Then Z = 0
当 Variant 变量包含 Empty 值时,可在表达式中使用它;将其作为 0 或零长度字符串来处理,这要根据表达式来定。
只要将任何值(包括 0、零长度字符串或 Null)赋予 Variant 变量,Empty 值就会消失。而将关键字 Empty 赋予 Variant 变量,就可将 Variant 变量恢复为 Empty。

Null 值
Variant 数据类型还可包含一特定值:Null。Null通常用于数据库应用程序,表示未知数据或丢失的数据。 由于在数据库中使用 Null 方法,Null 具有某些唯一的特性:
1.对包含 Null 的表达式,计算结果总是 Null。于是说 Null 通过表达式“传播”;如果表达式的部分之值为 Null,那么整个表达式的值也为Null。
2.将 Null 值、含 Null 的 Variant 变量或计算结果为 Null 的表达式作为参数传递给大多数函数,将会使函数返回 Null。
3.Null 值经由返回 Variant 数据类型的内在函数传播。
也可用 Null 关键字指定 Null 值。
Z = Null
也可用 IsNull 函数测试 Variant 变量是否包含 Null 值。
If IsNull (X) And IsNull (Y) Then
Z = Null
Else
Z = 0
End If
如果将 Null 值赋予 Variant 以外的任何其它类型变量,则将出现可以捕获的错误。而将 Null 值赋予 Variant 则不会发生错误,Null 将通过包含Variant 变量的表达式传播(尽管 Null 并不通过某些函数来传播)。可以从任何具有 Variant 返回值的函数过程返回 Null。
除非明确将 Null 赋予变量,否则变量不会设置成 Null 值,所以,如果不在应用程序中使用 Null,就不必书写测试 Null 和处理 Null 的程序。
详细信息 关于如何在表达式中使用Null的详细信息,请参阅语言参考的“Null”部分。

Error 值
在 Variant 中,Error 是特定值,指出已发生的过程中的错误状态。但是,与其它类型错误不同,这里并未发生正常的应用程序级的错误处理。因此,程序员或应用程序本身可根据 Error 值进行取舍。利用 CVErr 函数将实数转换成错误值就可建立 Error 值。 详细信息 关于如何在表达式中使用 Error 值,请参阅《Visual Basic 6.0语言参考手册》中的“CVErr 函数”部分。关于错误处理的信息,请参阅第十三章“调试代码和处理错误”。有关 Variant 数据类型的更详细信息,请参阅《联机手册》中的“高级变量主题”。

高级变量主题

数值在变量中的内部表示
Variant 变量维护它们所存储的数值的内部表示。这个表示将决定 VisualBasic 在执行比较操作和其它操作时如何处理这些值。将值赋予 Variant 变量时,Visual Basic 会用最紧凑的表示正确记录这个值。以后的操作可能使Visual Basic 改变这个用于特定变量的表示(Variant 变量不是无类型变量,而是能够随意改变类型的变量)。这些内部表示与本章前面在“数据类型”中讨论的数据类型相一致。
注意 Variant 总保持 16 位,无论其中存储了什么数据。对象、字符串和数组,在物理上并非存于 Variant 之中;在这些情况下,用四个字节的 Variant 来保持对象引用、或者字符串或数组的指针。而真正的数据存在其它地方。
很多时候,不必了解Visual Basic为特殊变量使用哪一种变量类型;VisualBasic会自动转换类型。若想了解Visual Basic正在使用哪种变量类型,可使用 VarType 函数。
例如,如果在 Variant 变量中存储二进制值,Visual Basic 就会用 Double 内部表示。如果知道应用程序并不需要 Double 值提供的高精度(以及由此而来的低速度),那么将此值转换成 Single 甚至转换成 Currency 就可以加快计算速度:
If VarType (X) = 5 Then X = CSng (X) '转换成单精度。
对 Array 变量,VarType 的值等于数组元素与数据类型返回值之和。例如,这个数组包含 Double 值:
Private Sub Form_Click ()
Dim dblSample (2) As Double
MsgBox VarType (dblSample)
End Sub
Visual Basic 的今后版本可能会增加新的 Variant 表示,所以,任何根据VarType 函数的返回值做出判断的代码都应能适当地处理非当前定义的返回值。
详细信息 关于 VarType 函数的信息,请参阅《Visual Basic 6.0语言参考手册》中的“VarType 函数”。关于数组的更详细信息,请参阅本章后面的“数组”。关于转换数据类型的详细信息,请参阅本章前面的“数据类型”。

时间: 2024-12-30 16:40:38

vb变量、常数和数据类型及过程概述(五)的相关文章

vb变量、常数和数据类型及过程概述(三)

常数 经常会发现代码包含一些常数值,它们一次又一次地反复出现.还可发现,代码要用到很难记住的数字,而那些数字没有明确意义.在这些情况下,可用常数大幅度地改进代码的可读性和可维护性.常数是有意义的名字,取代永远不变的数值或字符串.尽管常数有点像变量,但不能像对变量那样修改常数,也不能对常数赋以新值.常数有两种来源:1.内部的或系统定义的常数是应用程序和控件提供的.在"对象浏览器"中的 Visual Basic ( VB ) .和 Visual Basic for applications

vb变量、常数和数据类型及过程概述(九)

过程概述 将程序分割成较小的逻辑部件就可以简化程序设计任务.称这些部件为过程,它们可以变成增强和扩展 Visual Basic 的构件. 过程可用于压缩重复任务或共享任务,例如,压缩频繁的计算.文本与控件操作和数据库操作.用过程编程有两大好处:1.过程可使程序划分成离散的逻辑单元,每个单元都比无过程的整个程序容易调试.2.一个程序中的过程,往往不必修改或只需稍作改动,便可以成为另一个程序的构件.在 Visual Basic 中使用下列几种过程:Sub 过程不返回值.Function 过程返回值.

vb变量、常数和数据类型及过程概述(一)

在Visual Basic环境下进行计算时,常常需要临时存储数据.例如,可能想要计算几个值,将它们进行比较,并根据比较的结果对它们进行不同的操作.如果想要比较这些值,就要存储它们,但不必把它们存入属性.像大多数编程语言那样,Visual Basic 使用变量来存储值.变量具有名字(用来引用该变量所含的值的名词)和数据类型(确定变量可以存储的数据的种类).数组可以用来存储建立了索引的相关变量集. 常数也存储数值,顾名思义,在整个应用程序执行过程中,这些值都保持不变.常数的使用增加了代码的可读性,因

vb变量、常数和数据类型及过程概述(十)

标准模块中的过程如果过程名是唯一的,则不必在调用时加模块名.无论是在模块内,还是在模块外调用,结果总会引用这个唯一过程.如果过程仅出现在一个地方,这个过程就是唯一的.如果两个以上的模块都包含同名的过程,那就有必要用模块名来限定了.在同一模块内调用一个公共过程就会运行该模块内的过程.例如,对于Module1 和 Module2 中名为 CommonName 的过程,从 Module2 中调用CommonName 则运行 Module2 中的CommonName过程,而不是 Module1中的 Co

vb变量、常数和数据类型及过程概述(四)

Numeric 数据类型Visual Basic 支持几种 Numeric 数据类型:Integer(整型).Long(长整型).Single(单精度浮点型).Double(双精度浮点型)和 Currency(货币型).与 Variant 类型相比,Numeric 类型占用的存储空间通常要少.如果知道变量总是存放整数(如 12 )而不是带小数点的数字(如 3.57),就应当将它声明为 Integer 类型或 Long 类型.整数的运算速度较快,而且比其它数据类型占据的内存要少.在 For...N

vb变量、常数和数据类型及过程概述(二)

模块内部使用的变量按照缺省规定,模块级变量对该模块的所有过程都可用,但对其它模块的代码不可用.可在模块顶部的声明段用 Private 关键字声明模块级变量,从而建立模块级变量.例如:Private intTemp As Integer在模块级,Private 和 Dim 之间没有什么区别,但 Private 更好些,因为很容易把它和 Public 区别开来,使代码更容易理解. 所有模块使用的变量为了使模块级的变量在其它模块中也有效,用 Public 关键字声明变量.公用变量中的值可用于应用程序的

vb变量、常数和数据类型及过程概述(十一)

提供可选参数的缺省值 也可以给可选参数指定缺省值.在下例中,如果未将可选参数传递到函数过程,则返回一个缺省值.Sub ListText(x As String, Optional y As _Integer = 12345)List1.AddItem xList1.AddItem yEnd Sub Private Sub Command1_Click ()strName = "yourname" '未提供第二个参数.Call ListText (strName) '添加"yo

vb变量、常数和数据类型及过程概述(七)

Variant 变量中存储的 Objects可以将 Objects 存储在 Variant 变量中.当需要高效地处理包括 Objects 在内的各种数据类型时,这可能十分有用.例如,一个数组中的所有元素都必须具有相同的数据类型.将数组的数据类型设置成 Variant 就可将Objects 连同其它数据类型一起存入同一个数组中. 数组如果有过用其它语言编程的经历,那么想必会熟悉数组的概念.由于有了数组,可以用相同名字引用一系列变量,并用数字(索引)来识别它们.在许多场合,使用数组可以缩短和简化程序

vb变量、常数和数据类型及过程概述(八)

用循环操作数组可以用 For 循环嵌套有效的处理多维数组.例如,在 MatrixA 中基于每个元素在数组中的位置为其赋值:Dim I As Integer, J As IntegerStatic MatrixA(1 To 10, 1 To 10) As DoubleFor I = 1 To 10For J = 1 To 10MatrixA (I, J) = I * 10 + JNext JNext I详细信息 关于循环的详细信息,请参阅本章后面的"循环结构"部分. 动态数组数组到底应该