1、本章开始,我们将学习如何编写程序代码以实现应用程序的功能。应用程序中需要处理各种各样的数据,在开始学习编写程序代码之前,首先需要理解这些数据如何表示、属于何种数据类型、如何用变量存储数据以及使用运算符构成表达式对数据进行运算。3.1 数据类型3.2 变量3.3 常量3.4 类型转换3.5 运算符与表达式数据是程序必须的组成部分,也是程序处理的对象。程序中使用的数据一定拥有某种类型,如数字、字符或日期等,我们称为数据类型,分为以下两类。基本数据类型。复合数据类型。VB.NET中有16中不同的基本数据类型,可以分为以下3类。数值类。文本类。其他数据类型。数据类型表示方式对应CLS类型字节数取值范围
2、说明整型IntegerSystem.Int324-2,1 4 7,4 8 3,6 4 8 2,147,483,647(有符号)用于表示简单整数字节型ByteSystem.Byte1 0255用于简单算术运算。由于这个类型的变量可以在一个字节中存储,所以运算速度最快有符号字节型SByte无4-128127(有符号)短整型ShortSystem.Int1623276832767(有符号)是整型的一种形式,相对表示范围较小长整型LongSystem.Int648(有符号)-9,223,372,036,854,775,8089,223,372,036,854,775,807(9.2E+18)是整型的一
3、种形式,相对表示范围较大单精度型SingleSystem.Single4对于负值,为-3.4 0 2 8 2 3 5 E+3 8 -1.401298E-45;对于正值,为 1.4 0 1 2 9 8 E-4 5 3.4028235E+38用于存放单精度浮点数双精度型DoubleSystem.Double4对于负值,为-1.79769313486231570E+308-4.94065645841246544E-324;对于正值,为4.94065645841246544E-3241.79769313486231570E+308用于存放双精度浮点数小数DecimalSystem.Decimal160
4、79,228,162,514,264,337,593,543,950,335(7.9E+28),不 包 含 小 数 点;0 7.9228162514264337593543950335,包含小数点右边28位;最 小 非 零 数 为0.0000000000000000000000000001(1E-28)常用于存储货币值无符号整型UInteger无404,294,967,295(无符号)无符号短整型UShort无2065,535(无符号)无符号长整型ULong无8018,446,744,073,709,551,615(1.8E+19)(无符号)Common Language Specificat
5、ion这是.NET公用语言规范,可以保证各种语言组件间的互操作性。Visual Basic.NET使用的每种数据类型都与CLS中的一种类型直接对应,这为构建跨语言集成,保证代码类型安全,确保用不同语言编写的对象能够起到交互作用打下了基础。注意,SByte、UInteger、UShort和ULong四种类型不符合公共语言规范(CLS),符合CLS的代码不能使用已使用了该数据类型的组件。因此如果编写的程序需要供其他语言编写的程序使用,最好不要使用这4种类型,而以其他类型如Byte、Integer、Short、Long等代替。数据类型表示方式 对应CLS类型字节数说明字符串型StringSystem
6、.String取决于实现平台用于存放任何形式的字符串,可以存放0到大约20亿个Unicode字符字符型CharSystem.Char2用于存放一个字符,它以065535之间数字的形式存储数据类型表示方式对应CLS类型字节数说明日期型DateSystem.DateTime8范围为0001 年1月1日午夜0:00:00到9999年12月31日晚上11:59:59布尔型BooleanSystem.Boolean取决于实现平台取值为True和False对象型ObjectSystem.Object4 个 字 节(3 2 位 平台),8 个字节(64位平台)任何类型都可以存储在Object类型的变量中除了
7、上述16种数据类型以外,VB.NET还允许用户自定义自己的数据类型,称为复合数据类型,包括以下3种。数组。结构。类。变量是计算机编程中的一个重要概念,是一个可以存储数据的名称。变量是值随着程序的运行而变化的量。下面的代码声明了一个整型的变量intX,并为它赋值。1 Dim intX As Integer=1 声明了一个整型变量intX,并将其值赋为1 2 intX=10 此时,intX值变为10Visual Basic中的元素名称必须遵循以下规则。必须以字母或下划线(_ _)开头。必须只包含字母、十进制数字和下划线。如果名称以下划线开头,则必须包含至少一个字母或十进制数字。长度不能超过1023
8、个字符。不能是Visual Basic中的关键字。例如,下面这些变量名都是合法的。strtotalx下面这些变量名都是非法的。12a 以数字开头ab%c 含有非法字符%dim 使用VB.NET关键字VB.NET中的变量名不区分大小写,即下面这几个名字在VB.NET中将表示同一个变量。intXintxINTX我们采用小写前缀加上有特定描述意义的名字的方式来为变量命名,这种命名方法被称为匈牙利命名法(Hungarian)。变量名的前3个字母用于说明数据类型,第4个字母大写以表示变量的实际含义,如下面的变量名。strFileName intTotalVB.NET有两种声明变量的方法。一种是使用Dim
9、关键字显式声明变量,其语法格式如下。Dim 变量名 As 数据类型例如,Dim intX as Integer。此行代码声明了一个整型的变量intX。再例如,Dim intX as Integer,c as Char。此行代码分别声明了一个整型变量intX和一个字符型变量c。另外一种方法是隐式变量声明,即不需要使用Dim语句显式声明变量,而是在需要的时候直接使用该变量。这种方法虽然使用起来方便,但是也容易带来许多问题,如果将变量名拼错了,将会导致一个难以查找的错误。1 intAppleSold=100 卖掉苹果的数量2 dblApplePrice=1.5 苹果的价格3 dblTotal=int
10、AppleSeld*dblApplePrice 卖掉苹果的总价上面3个变量都是隐式声明的,但计算卖掉苹果总价的语句中,intAppleSold由于输入错误,写作intAppleSeld。此时,编译器无法区分这是一个新的变量,还是输入错误,因此将intAppleSeld作为一个新的变量对待,导致计算错误。变量=表达式表示将赋值运算符右边表达式的值赋给左边的变量。例如,intX=10 intX=intX+1 右边表达式可以包含左边的变量 Dim intX As Integer=10 变量声明时赋值常量是程序运行期间值不发生变化的量。VB.NET中的常量分为以下两种。文字常量。符号常量。文字常量是直
11、接出现在程序中的数值、字符或者字符串。字符和字符串常量是用双引号括起来的任意字符或者字符的集合。a 单个字符Hello!字符串常量123 十进制&HA2 十六进制&O123 八进制123E8 E表示单精度123D-3 D表示双精度符号常量可以为文字常量取一个友好的名字,以提高程序的可读性。另外,如果有某个数值需要在程序中多处使用,也可以将其声明为符号常量,便于修改。符号常量声明的语法格式如下。Const 常量名 As 数据类型=表达式下面是一些定义符号常量的例子。Const MAXLENGTH As Integer=100 Const MINLENGTH As Integer=1 Const
12、ERROR As String=Input message is too long!通常我们建议将符号常量名全部采用大写来表示,以示与变量区别。将值从一种数据类型更改为另一种类型的过程称为类型转换。根据转换的结果是否在目标数据类型的范围内,类型转换可以分为扩大转换和收缩转换两种。扩大转换能够维持原来的数据值,没有数据损失。收缩转换从一种较大的类型转到一种较小的类型,可能会有数据损失,不能维持原来的数值。1 Dim X As Single=123.452 Dim Y As Integer3 Y=X Y值为123,整型第3行在赋值过程中,发生了由单精度浮点型向整型转换的过程。由于整型不够精确,不能
13、保持小数点后面的数字,导致在类型转换小数部分丢失。上述类型转换是由编译器自动进行的,不需要在代码中加入任何特殊语法,这种类型转换称为隐式转换。扩大转换许可的范围,按照ByteShortIntegerLongDecimalSingleDouble从左至右均可进行转换,而从右至左的转换则是收缩转换。由于扩大转换不会造成数据丢失,总是可以转换成功,因此始终允许隐式执行。VB.NET提供了类型转换关键字,可以强制转换为所需要的数据类型。例如,1 Dim X As Single=123.45 2 Dim Y As Integer 3 Y=Cint(X)Y值为123,整型 上面第3行中,使用了CInt关键
14、字强制将括号中的Single类型变量X转换为Integer类型。算术运算符关系运算符连接运算符逻辑运算符赋值运算符运算符作用+、-加、减Mod取模整除*、/乘、除-取负指数运算符功能小于大于=大于或等于=等于不等于Is对象比较IsNot对象比较Like字符串模式比较“&”和“+”两个连接运算符。“&”专门用于字符串连接;而“+”除了数值加法运算外,也可以用于字符串连接。基本语法格式如下。result=exp1&或result=+exp2对于“&”运算符来说,exp1和exp2都应该是string类型或者可以扩大转换为string类型的表达式,连接结果result为string类型。例如 1 D
15、im str As String 2 str=Hello&World str值为“Hello World”3 str=123&abc str值为“123abc”对于“+”运算符来说,exp1和exp2可以是string类型表达式,也可以是数值表达式。如果exp1和exp2均为数值,结果将为它们的算术和。如果exp1和exp2均为字符串,将把它们的值连接起来作为结果;如果exp1是数值型,而exp2是字符串或者相反,则根据当前Option Struct设置。On,则产生编译器错误。Off,则将Strin隐式转换为Double,并执行加法运算;如果String中含有非数值的字符,则隐式转换失败,引
16、发异常。我们建议对于字符串连接,只使用专用的字符串连接运算符“&”,而不用“+”,以消除“+”运算符的多义性,防止可能出现的错误。运算符说明And逻辑与运算。如果两个表达式都为true,则结果为trueOr逻辑或运算。如果两个表达式中有一个为true,则结果为true。仅两个表达式全为false时,结果才为falseNot逻辑非运算。如果表达式为true,则结果为false;反之如果表达式为false,则结果为trueXor逻辑异或运算。当两个表达式值不同时,结果为true;相同时(都是true或者都是false)结果为falseAndAlso短路与运算。如果两个表达式都是true,则结果为t
17、rue。如果第一个表达式就是false,则不计算第二个表达式,直接返回falseOrElse短路或运算。如果两个表达式都是false,则结果为false。如果第一个表达式是true,则不计算第二个表达式,直接返回true赋值运算符(=)在3.2.2节为变量赋值时已经介绍过。该运算符是计算右边表达式的值并赋值为左边的变量。例:dim x as integerx=10复合运算符 算术运算符和连接运算符还可以和赋值运算符一起构成复合的赋值运算符,如+=、-=、*=、/=、=、=、&=等。这些运算符同样进行赋值操作,取左边变量的值与右边表达式进行运算之后,再将运算结果赋值给左边的变量。1 Dim num1 As Integer=102 Dim num2 As Integer=33 num1+=num2 等价于num1=num1+num24 num1-=num2 等价于num1=num1-num25 num1*=num2 等价于num1=num1*num26 num1=num2 等价于num1=num1/num27 Dim str1 As String=10 8 Dim str2 As String=3 9 str1&=str2 等价于str1=str1+str2