2.1 数据类型和变量
无论哪种语言,数据类型和变量都是很重要的。本节主要介绍基本的数据类型及其之间的转换,以及变量、常量等,包括一般的数值类型、字符类型、数组、常变量、枚举和结构类型等。
2.1.1 基本数据类型
VB.NET中的基本数据类型可以分为两个类别,分别是数值型和复合类型。基本类型、枚举和结构为数值型;类、字符串、标准模块、接口、数组等为复合类型。
无论数值型还是复合类型,其声明方式是一样的,当然它们的语义是不同的,具体数据类型如表2-1所示。
表2-1 数据类型
1.数值数据类型
(1)整型表示不带小数点和指数符号的数。
Short(短整型):2字节
Integer(整型):4字节,取值范围:-32768~+32767,如14、-453、746都是整型
Long(长整型):8字节,取值范围:-2147 483648~+2147 483647
Byte(无符号整型):1字节
(2)浮点型表示带小数部分的数据类型。
Decimal(十进制数):16个字节
Single(单精度浮点数):4个字节
Double(双精度浮点数):8个字节
(3)其他数据类型。
Boolean(布尔型):2字节
Date(日期型):8字节
2.复合数据类型
字符数据类型。分为Char(单个字符)和String(任意多个字符)。
Object(对象型):4字节
Char(字符型):2字节
String(字符串型):取决于实现平台
Enum(枚举类型):任意
Structure(结构类型):任意
2.1.2 数据类型转换
数据类型转换就是将一种数据类型变为另一种数据类型。这可以通过使用系统内置函数进行转换,VB.NET的内置函数如表2-2所示。
表2-2 数据类型转换内置函数
将字符串型数据转换为整数型,可使用CInt()内置函数。示例如下:
Dim str As String="12" Dim x As Boolean = True Dim Intx1 As Integer Dim Intx2 As Integer Intx1=CInt(str)
Intx2=CInt(x)
这样Intx1的值就为12了,Intx2的值为-1。当然并不是所有的类型都可以转换为Integer整型,要视具体情况而定。
要避免代码中出现转换错误,可以在类文件或模块的最高行上设置Option Strict选项,或者通过修改项目的属性让它位于项目级。Option Strict的用法如下:
Option Strict { on | off }
默认情况下,Option Strict的值是off,因此,最好在项目属性上改变这个默认设置为Option Strict,以避免任何的转换错误。
2.1.3 变量和常量
1.变量的概念
变量是计算机编程中的一个重要概念。在VB应用程序执行期间,变量用来临时存储数值。变量具有名字(用来引用变量值的字符串)和数据类型(确定变量能够存储的数据的种类)。可以把变量看作内存中存放未知值的地点。变量名有一定的命名规则,其一般规则如下:
(1)必须以字母开头;
(2)不能包含嵌入的句号(英文)或嵌入的类型声明字符;
(3)不得超过255个字符;
(4)在同一个范围内必须是唯一的。
变量的命名规则就是为了让代码更加易于阅读和维护管理而制定的程序编写的命名准则,下面介绍微软建议采用的命名规则。
变量应该遵循的命名规则为:范围+数据类型+标识名称。
其中,范围表示变量的作用范围,如果是公有变量就用小写的g表示,含义为global,局部变量则直接省略不写;
数据类型则是指如Integer、string等数据类型的小写的三码简写,表2-3列出包含范例数据类型的三码简写表,供读者参考使用。
表2-3 三码简写表
注:udt就是英文user define type的简写。
标识名称是变量的主体,建议使用英文大小写搭配,并以容易记忆、能够代表变量用意的名称,当然前提是标识名称必须是合法的(关于什么才是合法的名称请参考其他的资料),如名字MyName按照命名规则就应该为strMyName。
2.变量的作用范围和生存期
VB.NET是一种基于.NET平台、面向对象的程序语言,具备面向对象技术的所有特性。在.NET平台下,所有数据类型、窗体等都是以类实现的,因此要想更好地理解变量的作用范围,就要以类的观点来看待变量的作用范围和生存期。
先来看看变量的一般声明方式,代码如下:
[Public | Protected| Friend | Protected Friend|Private|dim|static|shared] VariableName as VariableType
变量的作用范围和生存期取决于两个因素,即变量声明使用了“[]”中的哪个关键字和在何处声明。
变量声明最常用的几个关键字为Public,Private,dim,static。
Public关键字不能在函数、(事件)过程、区域内部(如for...next等语句内)使用,一般只能在模块内声明全局变量,如下面的intCount变量;另外Public在类中声明的是公有变量(成员),表示可以被派生类继承的成员。
Module module1
Puplic intCount AS integer
End Module
用Private,dim声明的变量都是局部变量,它的范围取决于变量在何处声明。如在窗体声明区声明,则有效范围为窗体内部,以此类推,在(事件)过程、模块内声明,相对应的只有在(事件)过程、模块内有效。如果在类中声明变量,则为私有变量(成员),表示不可以被派生类继承的成员。
比较特别的是static,它声明的变量叫静态变量,就是作用范围和生存期不一致的变量。一般的变量,其作用范围和生存期是一致的;而static声明的变量提供了局部的作用范围和全局的生存期,也就是说,它的可访问的范围取决于它在何处声明,而无论在何处声明,都提供整个程序的生存期(全局)。需要注意的是,不能将static修饰符用于结构中的局部变量。
至于Protected,Friend,Protected Friend关键字,则通常用在类中进行变量的声明,Protected(保护)的有效范围介于Public和Private之间,对于类以外的代码,像私有成员一样无法访问,然而对于继承它的派生类来说,就像公有成员一样可以继承为自己的成员;Friend(友好)的有效范围则比Protected更大,只要是同个项目的文件和类,均可访问,换一种说法,就是程序集范围;Protected Friend则是Protected, Friend的结合,有效范围为派生类和同个项目内的文件。
还有一个很重要的关键字——shared。它在类中声明的变量叫做共享成员,所谓的共享成员就是在类尚未产生实际的对象前,便可以访问或调用的属性和方法。
下面以实例说明如何声明并使用变量。