![VB[1].NET数据语法基础_第1页](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/c14a1301-3693-4171-a689-f40513716c3a/c14a1301-3693-4171-a689-f40513716c3a1.gif)
![VB[1].NET数据语法基础_第2页](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/c14a1301-3693-4171-a689-f40513716c3a/c14a1301-3693-4171-a689-f40513716c3a2.gif)
![VB[1].NET数据语法基础_第3页](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/c14a1301-3693-4171-a689-f40513716c3a/c14a1301-3693-4171-a689-f40513716c3a3.gif)
![VB[1].NET数据语法基础_第4页](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/c14a1301-3693-4171-a689-f40513716c3a/c14a1301-3693-4171-a689-f40513716c3a4.gif)
![VB[1].NET数据语法基础_第5页](http://file3.renrendoc.com/fileroot_temp3/2021-12/5/c14a1301-3693-4171-a689-f40513716c3a/c14a1301-3693-4171-a689-f40513716c3a5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 一、数据类型 integer整型类型内在分配(字节)数值范围short 2 -3276832767 int16 2 -3276832767 uint16(无符号)2 065535 integer 4 -21474836482147483647 int32 4 -21474836482147483647 uint32(无符号)4 04294967295 long 8 -9223372036857755808922337203687755807 int64 8 -9223372036857755808922337203687755807 uint64(无符号)8 018446744073709
2、5551615 浮点数浮点数也称实型数或实数,是带有小数部分的数值。它由三部分组成:符号、指数及尾数。单精度浮点数和双精度浮点数的指数分别用“e” (或“ e” )和“ d” (或“ d” )来表示。(1)single单精度浮点型这个类型用于存储单精度浮点型数字,占用4 个字节,负数取值范围在-3.402823e+38-14.401298e-45;正数取值范围在 1.401298e+453.40282e38 之间。(2)double 双精度浮点型一般浮点数字都存储为double 双精度浮点型,可以保证很高的精度,是最常用的浮点型数字类型,占用8 个字节,范围在 -1.7976931348623
3、1e308-1.79769313486232e308之间。(3)decimal 十进制 vb 6.0 支持 currency (贷币)数据类型,currency 变量以整数格式存储64 位数字,以10000 为标度,将数字表示为定点数,其小数左边为15 位,右边为4 位。 vb 6.0 的 currency数据类型的精度不够,无法避免四舍五入的误差,因些在 vb.net引入了 decimal 这种数据类型。 vb.net中将 currency 数据类型转换为decimal 、decimal 变量存储带有符号(正负号)的96 位整数。 字节 / 字符 / 字符串型(1)byte 字节型这个类型的
4、数据是从0255 的无符号整数,用来声明二进制的变量,但显示的值为十进制的。如果要声明的变量包含二进制数据,通常将其声明为byte 型的数。例如经常用到的颜色三组合红黄蓝即rgb三颜色分量。(2)char 字符型这是 vb.net中的单字符数据类型,默认为字符是unicode 字符,占用2 个字节。常常用来声明单字符的变量。如下: dim charfirst as char charfirst=”a”声明一个char 类型的变量charfirst,并且赋给了一个值a,字符用双引号包括2 (3)string字符串型使用下列语句来声明一个字符串变量: dim strtext as string 可
5、以在上述语句的最后面加上* ,再加上一个正整数来指定这个字符串变量的长度。如下: dim strtext as string*20 如果赋予字符串的长度超过了字符串的定长,那么visual basic.net会自动截去超出的长度。 其它数据类型(1)boolean 布尔型布尔型数据表示“真(true ) ”或“假( false ) ”这样的一种二值状态,简单的就是计算机中的0 和 1,当没有为该类型变量赋值时,初始值为flase 或 0。vb.net的布尔值实际上有3 个, +/-1都是 true ,而 0 为 flase 的值。一般情况应尽量使用true 或 flase 直接赋值或参与运算而
6、不用+/-1 或 0 代替。这种变量只占1 个字节。(2)data 日期型 vb.net中用 date 型变量来保存日期信息。data 在内部存储为64 位整数(注意这里的位指整数的位数而不是字节的位数)。如下: dim dbdata1 as data dbdata1=now ( ) 初始化dbdata1 变量,得到当前日期。(3)object 对象数据类型 vb.net用 object 数据类型代替了vb 6.0 的 variant变体数据类型。object 变量用作指向对象的指针。 object对象数据类型有几个特殊值。1、error值: 指出已发生的过程中的错误状态。2、dbnull值:
7、 空值,通常用于数据库应用程序,表示未知数据或丢失的数据。可以用isbnull函数测试object对象数据类型变量是否包含dbnull 值。如下: if isdbnull (x) and isnull (y) then 2=dbnull then 2=0 end if 3 、 nothing 值:有时需要知道是否已将一个值赋予所创建的变量。在赋值之前, object 对象类型变量具有值nothing(也是空值,但表示什么都没有)。值 nothing 是不同于0,零长度字符( “” )或 dbnull 值的特定值。当式中使用它,将其作为 0 或零长度字符串来处理,这要根据表达式来定。只要将任何值
8、包括0, 零长度字符串或dbnull() 赋予 object对象类型变量, nothing值就会消失。 而将关键字nothing赋予 object 对象类型变量, 就可将 object对象类型变量恢复为 nothing 。(4)枚举类型在程序设计中,有些数据无法直接用整型数或浮点型数来表示,必须经过某种转换,把本来不是简单地用整数来表示的问题硬用几个整数去描述,因而降低了程序的可读性。为此,visual basic.net提供了枚举数据类型。当一个变量只有向种可能的值时,可以定义为枚举类型。所谓“枚举”,是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。声明格式如下:public
9、 | private enum name as type membname1 = initexpr1 membname2 = initexpr2 ,3 membnamen = initexprn end enum 参数说明如下:1、public :可选。 表示所定义的enum类型在整个项目中都是可见的,在默认情况下, enum类型被定义为public 。2、private:可选。表示所定义的enum类型只在声明的模块中是可见的。3、enum :声明该枚举类型的关键字。4、name :所定义的enum类型的名称,必须合乎vb.net的命名规则,在定义enum类型的变量或参数时用该名称来指定类型。
10、5、type :可选。用来声明枚举及其所有成员的数据类型,可以是byte 、integer等。如果不指定type ,则默认为 integer。6、membname:枚举成员的名称。7、initexpr:可选。为创建枚举成员时计算和分配给该成员的表达式,该表达式可以包含文本、已定义的常数,另一枚举成员或文本、常数和枚举成员的任何组合,但不能在这个表达式里使用变量或函数,只能适当使用一些强制类型转换函数。下面给出一些声明枚举变量的实例:1、在 enum语句的格式中“initexpr”可以省略。在默认情况下,枚举中的第一个常数被初始化为0,其后的常数则初始化为比其前面的常数大1 的数值。如:publ
11、ic enum days sumday monday tuesday wednesday thursday friday saturday end enum 定义了一个枚举类型days,它包括 7 个成员,都略了“initexpr” ,因此常数sunday 的值为 0,常数 monday的值为 1,常数 tuesday 的值为 2,等等。2、可以用赋值的语句显式地给枚举中的常数赋值,即不省略“initexpr” 。所赋值可以是任何长整数,包括负数。如果希望用于小于0 的常数代表出错条件,则可以给枚举常数赋一个负值。如:public enum workdsys saturday sunday=0
12、 monday tuesday friday invalid=-1 end enum 在上面的枚举中,常数invalid显式地赋值 -1 ,而常数sunday 被赋值 0。因为 saturday 是枚举中的第一个元素,所以也被赋值0。monday的数值为1(比 sunday 的数值大1) ,tuesday 的数值为2 等等。3、 visual basic.net将枚举中的常数数值看作整数。如果将一个浮点数值赋给一个枚举中的常数,visual basic.net 会将该数值取整为最接近的整数。4、当对一个枚举中的常数赋值时,可以使用另一个枚举中的数值。public enum workdays s
13、unday=0 monday tuesday wednesday 4 thursday friday saturday=days.sturday-6 invalid=-1 end enum 这里的 days枚举的声明与前面的声明等同。注意: enum语句只能在模块、命名空间或文件级出现。这就是说可以在源文件中或者在模块、类或结构内部声明枚举,但不能在过程内部进行声明。在定义enum类型之后,就可以将其用于声明变量类型,过程参数和function返回值。二、复合数据类型迄今为止,我们使用的都是属于基本数据类型或简单数据类型(字符串、整型、实型等)的数据,可以通过简单变量名来访问它们的元素。除基本
14、数据类型外,visual basic.net还提供了复合数据类型,包含数组 、结构 和集合 。复合数据类型是按照一定规则组成的元素类型的数据,元素类型又称基类型,它可以是简单数据类型,也可以是复合数据类型。对于复合数据类型来说,不能用一个简单变量名来访问它的某个元素。 数组在实际应用中 , 常常需要处理同一类型的成批数据。例如,为了处理100 个学生某门课程的考试成绩,可以用s1、s2、s3,s100 来分别代表每个学生的分数,其中s1 代表第一个学生的分数,s2 代表第二个学生的分数 , 。这里的 s1、s2, 、s100是带有下标的变量,通常称为下标变量。显然,用一批具有相同名字、不同下标
15、的变量来表示同一属性的一组数据,能更清楚地表示它们之间的关系。在visual basic.net 中,把一组具有同一名字、不同下标的下标变量称为数组。如:str(8)。其中 s称为数组名, 8 是下标,上标为0。一个数组,如果只用一个下标就能确定一个数组元素在数组中的位置,则称为一维数组。而由两个或多个下标变量所组成的数组称为二维数组或多维数组。1、静态数组在 visual basic.net里,数组下界总是从0 开始,不能改变,并且它们基于数组中的元素的数量被定义。如: dim intmyarray(10) as integer 该元素从intmyarray(0)开始,直到intmyarra
16、y(10)结果,共11 个元素。2、动态数组数组到底应该有多大才合适,有时可能不得而知,所以希望能够在运行时具有改变数组维数大小的能力。 visual basic.net 中,固定大小数组通过dim 语句声明,在些语句中必须指出数组的维数及大小。动态数组也是先在 dim语句中声明,但不指定大小,只需要声明其类型,即数组名后的()内为空,最多只有“,”分隔开每个维。声明定义之后的数组还不能直接赋值。在使用动态数组之前,再通过 redim语句重新确定动态数组上界大小,rem之后才可以赋值或参与运算。 visual basic.net 中的 redim语句仅用于为数组分配或重新分配空间,而不能重新声
17、明数组,一旦在最开始用dim语句确定了其维数之后,就再也不能改变其维数的数目。如从二维扩大到三维,或从三维退到一维,唯一能改变的就是数组的大小,即数组上下界。另外,也不能通过redim改变数组类型。动态数组以变量作为下标值,在程序运行过程中完成定义,通常分为两步:首先用dim 或 public声明一个没有下标的数组(括号不能省略),然后在过程中用redim语句定义带下标的数组。如: dim testvar() as integer dim s integer private sub bubbon1_click(byval sender as system.object,byval e as s
18、ystem.evenargs) handles button1.click) 5 s=inputbox(“请输入数组大小”, ”数组输入” , ”10” ) redim tesvar(s) , end sub 该例先在窗体层用dim语句声明了一个空数组tesvar 和一个变量s, 然后在按钮事件过程中用redim语句定义该数组,下标 s在运行时输入。 redim 语句的一般格式为:redim preserve 变量(下标)该语句用来重新定义动态数组,按定义的上界重新分配存储单元。当重新分配动态数组时,数组中的内容被清除,但如果 redim语句使用了preserve 选择项,则不清除数组内容。在
19、redim语句中可以定义多个动态数组,但每个数组必须事先用dim variable()(一维数组)或dim variable(,)(二维数组)这种形式进行声明,在括号中省略上界,在用 redim语句重新定义时指定数组下标的上界。如: dim stuname(),address(),city() as string redim stuname(sn),address(sn),city(sn) redim只能出现在事件过程或通用过程中,用它定义的数组是一个“临时”数组,即在执行数组所在的过程时为数组开辟一定的内存空间,当过程结束时,这部分内存即被释放。对动态数组的具体说明如下:(1)动态数组分两次
20、定义,第一次用dim、public 、private等语句定义,只有类型,不指定维数;第二在redim语句定义, 给出具体的维数和上界。对于一维数组来说,第一次定义时, 数组名的后面带有一对圆括号,例如 temp( ) ;而对于二维数组来说,第一次定义时,数组名后面的圆括号中有一个逗号,例如temp( , ),依此类推。(2)可以多次用redim语句定义同一个数组,随时修改数组中元素的个数,例如: private sub button1_click(byval sender as system.object,byval e as system.evenargs) handles button1
21、.click dim temp() as string rem temp(4) temp(2)=”microsoft” msgbox(temp(2) redim temp(6) temp(5)=”visual basic.net” msgbox(temp(5) end sub 在事件过程中,开始时用redim定义的数组temp有 5 个元素,然后再一次用redim把 temp 数组定义为7 个元素。但是注意,只能改变元素的个数,不能改变数组的维数。(3)在用 redim重新定义动态数组时,可以使用可选的preserver关键字。如果不使用该关键字,则原来数组中的数据将被清除,而如果使用了该关键
22、字,则原来数组中的数据将被传送到新建立的数组中。3、数组的清除和重定义数组一经定义,便在内在中分配了相应的存储空间,其大小是不能改变的。也就是说,在一个程序,同一个数组只能定义一次。有时候,可能需要清除数组的内容或对数组重新定义,这时可以用erase 语句实现。格式为:erase 数组名 ,数组名 , erase语句用来重新初始化静态数组的元素,或者释放动态数组的存储空间,它只能出现在过程中。注意,在 erase语句中,只给出要刷新的数组名,不带括号和下标。例如:erase test 对数组清除和重定义的具体说明如下。(1)当把 erase 语句用于静态数组时,如果这个数组是数值数组,则把数组
23、中的所有元素置为0;如果是字符串数组,则把所有元素置为空字符串;如果是结构数组,则根据每个元素(包括定长字符串)的类型重新进行设置。如下表:6 erase 语句对静态数组的影响数组类型erase 对数组元素的影响数值数组将每个元素设为0 字符串数组(变长)将每个元素设为零长度字符串(“” )object 数组将每个元素设为empty 结构数组将每个元素作为单独的变量来设置对象数组将每个元素设为nothing (2) 当把 erase 语句用于动态数组时,将删除整个数组结构并释放数组所占用的内存。也就是说, 动态数组经erase后即不复存在;而静态数组经erase 后仍然存在,只是其内容被清空。
24、(3)erase 释放动态数组所使用的内存。在下次引用该动态数组之前,必须用redim语句重新定义该数组。例:编写程序,试验erase 语句的功能。 private sub button1_click(byval sender as system.object,byval e as system.eventargs) handles button1.click dim test(10), i as integer debug.writeline(“” ) for i=0 to 10 test(i)=i debug.write(str(test(i) & “” ) next i eras
25、e test debug.writeline(“” ) debug.writeline(“erase test()”) redim test(12) for i=0 to 12 debug.write(str(text(i) & “” ) next i debug.writeline(“” ) debug.writeline(“” ) end sub 在上面的事件过程,定义了一个数组text , 用 for 循环语句为每个元素赋值,并输出每个元素的值,然后执行erase语句,将各元素的值清除,再用redim语句重新定义数组text ,使得每个元素的值为0。 redim是不能直接定义数组
26、的,但从这个例子可以看出,在用erase 清除一个数组后,可以用redim语句重新定义该数组。4、默认数组与嵌套数组在 visual basic.net中,允许定义默认数组,并可用一个数组作为另一个数组的元素,即数组嵌套。(1)默认数组默认数组就是默认数据类型的数组。在一般情况下,定义数组应指明其类型,如:static elec(100) as integer 定义了一个数组elec ,该数组的类型为整型,它有101 个元素,每个元素都是一个integer数。如果把上面的定义改为:static elec(100) 则定义的数组是默认数组,其类型默认为object ,因此,该定义等价于:stat
27、ic elec(1 to 100) as object 从表面上看,定义默认数组似乎没有什么意义,实际上不然。几乎在所有的程序设计中,一个数组各个元素的数据类型都要求相同,即一个数组只能存放同一种类型的数据。而对于默认数组来说,同一个数组中可以存放各种不同的数据。因此,默认数组可以说是一种“混合数组”。请看下例:编写程序,试验默认数组的功能。 private sub form1_click(byval sender as object,byval as system.evenargs) handles mybase.click 7 static defau(5) dim i as short
28、debug.writeline(“” ) defau(0)=”清华大学” defau(1)=100 defau(2)=234.56 defau(3)=”beijing ” defau(4)=now defau(5)=&haaf for i=0 to 5 debug.writeline(“ defau (“ & i & “) = “ & defau(i) next i end sub 该事件过程定义了一个表态数组defau(默认数组一般应定义为静态的),然后对各元素赋予不同类型的数据,包括整形、实型、日期和时间类型及十六进制整型。(1)嵌套数组在一般情况下,数组元
29、素是一个具体的数据。而在visual basic.net 中,可以用数组作为另一个数组的元素,这样的数组称为嵌套数组。注意,嵌套数组必须是默认数组(即object类型),而被嵌套的数组必须是标准数据类型数组。在实际应用中,通常把整个被嵌套数组赋给嵌套数组中的某个元素,在赋值语句中写上被嵌套数组的名字,后面加上一对空括号。例如:dim a(4) as integer dim b(2) for i=1 to 4 a(i)=i*i next i b(1)=a() 该例首先定义了两个数组,其中a 为整型数组,b 为默认数据类型(即object )数组,在循环语句中为数组a 各元素赋值,然后执行“b(1
30、)=a()” ,即可把数组a 作为数组b 的第一个元素。在这种情况下,数组a 中的各元素可以这样表示: b(1)(1) b(1)(2) b(1)(3) b(1)(4) 5、数组的初始化定义数组的目的在于使用数组。而为了使用数组,就要给数组的各个元素赋初值,然后引用指定的元素。在使用数组时,通常要求数组有初值。当然可以用赋值语句或输入语句使数组中的元素得到值,但这样做会占用运行时间。为些,visual basic.net允许在定义数组时对各元素指定初始值,称为数组的初始化。在 visual basic 6.0以前的版本中,数组元素的初始值用array 函数实现,而在visual basic.ne
31、t中,给数组赋初始值的方法与c语言类似。(1)一维数组的初始化:dim 数组名 ( ) as 类型 = 值 1,值 2,值 3,, ,值n visual basic.net不允许对显式指定上界的数组进行初始化,因此“数组名”后面的括号中必须为空,根据具体初值的个数确定数组的上界,需要赋给各元素的初值放在等号后面的花括号中,数据之间用逗号隔开。如:dim a() as short = 2,4,6,8,10 定义了一个short型数组 a,该数组有5 个初值,因此数组的上界为4,即 a(4) 。经过上述定义和初始化后,把花括号中的值依次赋给各数组元素,使得 a(0)=2,a(1)=4,a(2)=6
32、,a(3)=8,a(4)=10。类似地, 对字符串数组也可以初始8 化。如:dim c() as string=“ liu ”, ”de”, ”rong” 定义了一个字符串数组c,该数组有3 个初值,因此数组的上界为2,即 c(3) 。经过上述定义和初始化后,把花括号中的值依次赋给数组元素,使得 c(0)=”liu ”,c(1)=”de ”,c(2)=”rong”(2)二维数组的初始化:dim 数组名 ( , ) as 类型 = 第一行值 , 第二行值 , , 第 n 行值 如: dim arr ( , ) as short=1,2,3,4,5,6,7,8,9,10,11,12 定义了一个二维
33、数组,它有3 行 4 列,即 arr (2,3)。(3)多维数组的初始化:与二维数组的相同。6、for each ,next 语句 for each,next 语句类似于for,next 语句,两者都用来执行指定重复次数的一组操作。但for each ,next语句专门用于数组或对象“集合”,其一般格式为: for each 成员 in 数组循环体 exit for , next 成员 这里的“成员”是一个object变量,它是为循环提供的,并在for each ,next 结构中重复使用,它实际上代表的是数组中的每个元素。“数组”是一个数组名,没有括号和上下界。用 for each ,nex
34、t 语句可以对数组元素进行处理,包括查询、显示或读取。它所重复执行的次数由数组中元素的个数确定,也就是说,数组中有多少个元素,就自动重复执行多少次。如: dim myarray(5) dim x as short for each x in myarray debug.write(x) next x 将重复执行6 次(因为数组myarray 有 6 个元素),每次输出数组的一个元素的值。这里的x 类似于 for ,next 循环中的循环变量,但不需要为其提供初值和终值,而是根据数组元素的个数确定执行循环体的次数。此外, x 的值处于不断的变化之中,开始执行时,x 是数组第一个元素的值,执行完一
35、次循环体后,x 变为数组第二个元素的值, ,当x为最后一个元素的值时,执行最后一次循环。x 是一个 object变量,它可以代表任何类型的数组元素。可以看出,在数组操作中,for each , next 语句比 for, next 语句更方便,因为它不需要指明结束循环的条件。 结构结构是一种较为复杂但非常灵活的复合数据类型,一个结构类型可以由若干个称为成员(或域)的成分组成。根据需要,不同的结构类型可以包含不同的成员。在程序设计中,结构有着重要的作用。 1、引例在实际应用中,有时候需要将不同的数据组合成一个有机的整体,以便于引用。这些组合在一个整体中的数据是互相联系的。 例如,在一个学术团体中
36、,为了与会员进行联系,需要建立一个会员通信录,这个通信录包括会员证号(num)、姓名( name ) 、职称 (tilte)、通信地址( addr ) 、邮政编码( zip )和电话号码(tel )等数据,每种数据的类型和长度不同,但都反映出会员有关通信方面的属性,因此用程序处理这些数据时,也希望构造出一种能把上述属于不同类型的数据作为一个整体来处理的数据类型。使用visual basic.net中的“结构” ,可以定义如下:public stucture mail public num as short 会员证号(短整型) public name as string 姓名 ( 字符串 ) p
37、ublic title as string 职称(字符串) public addr as string 通信地址(字符串) public zip as integer 邮政编码(整型)9 public tel as string 电话号码(字符串) end structure 上面定义了一个结构类型,其中structure是 visual basic.net关键字, main 是“结构名” ,在 structure main和 end structure之间的部分是该结构中的各个成员,每个成员称为结构中的一个域,以分号隔开,由它们组成一个结构。上面定义了一个结构类型,我们可以建立一个会员通信录
38、。假定会员王大明已经登录了与他通信联系有关的数据,遇可以编写一个包含些结构的程序来处理这些数据。王大明有关信息编号姓名( name )职称 (title) 地址( arr )邮编( zip )电话 (tel) 1 王大明教授北京100084 62781722 用结构类型记录和显示会员王大明有关通信联系的信息。public structure main public num as short public name as string public title as string public addr as string public zip as integer public tel as
39、string end structure private sub form1_click ( byval sender as object , byval e as system.eventargs) handles mybse.click dim member1 as mail 定义结构变量 dim spa as string=”对结构各个成员赋值 member1.num=1 m= ”王大明” member1.title=”教授” member1.addr= ”北京” member1.zip=100084 member1.tel=”62781722”通过结构变量分别引用
40、结构的各个成员 debug.writeline(“” ) debug.write(“num name title addr”) debug.writeline(“ zip tel”) debug.write(“-“) debug.writeline(“-“) debug.write(“ ” & member1.num & spa & ) debug.write(spa & mamber1.title & “ & spa & member1.addr) debug.writeline(“ & member1.
41、zip & spa & member1.tel) end sub 这个程序很简单,但它是一个能在机器上运行的程序,其中所涉及的结构变量的定义、赋值和引用等操作将在后面详述,读者先初步理解这个程序,如果能上机运行一下,则对理解后面的内容会有所帮助。2、结构类型与结构变量的定义(1)定义结构类型的一般格式如下: public | friend | private | dim structure 结构名10 变量声明 过程声明 end structure 结构类型的定义以structure开始 , 以 end structure结束,格式中各部分的含义如下: public或 dim:
42、可选。用 public关键字声明的结构具有公共访问权限。对于公共结构的可访问性没有任何限制。 friend:可选:用 friend关键字声明的结构具有友元访问权限,可以从包含其声明的程序中以及同一程序集中的其他任何地方访问它们。 private:可选。用private修饰符声明的结构具有私有访问权限,只能在同一模块中访问。 结构名:必需。要定义的结构的名称,必须是有效的visual basic.net标识符。 变量声明:必需。一个或多个dim、private或 public语句,声明作为结构的数据成员的变量或事件。这些声明与普通变量声明一样,遵循相同的规则。也可以在结构中定义常数或属性,但必须
43、至少声明一个变量或事件。 过程声明:可选:作为结构的方法成员的0 个或多个function 、property或 sub过程的声明。这些声明与在结构外一样,遵循相同的规则。上面格式中的structure是 visual basic.net 的关键字,表示要定义的类型是结构,“结构名”是程序设计者自己取的名字, 它应该是visual basic.net 合法的标识符, 如前面例子中定义的会员通信结构类型中的“mail ” 。structrue和“结构名”之间至少要有一个空格。在structur 和 end structure之间的部分是该结构的成员,一个结构内至少要有一个变量声明或事件声明成员,
44、每一个成员秒为结构中的一个域,成员名的命名规则与变量名相同,但不能称为变量名,具体原因后面还要谈到。所有成员组成“成员表列”,也称为“域表” 。因此,结构定义的一般形式也可以写成:structure 结构名成员表列end structure 使用结构时应注意如下事项。 structur 语句只能在模块、名称空间或文件级出现。也就是说, 可以在源文件或模块、接口或类内部声明结构,但不能在过程内部声明。结构可以嵌套,即可以在一个结构中定义另一个结构,但不能通过外部结构访问内部结构的成员,必须声明一个内部结构的数据类型变量。 默认情况下,结构为friend 。如果要具体地指定可访问性,则应在stru
45、cture语句中含有public 、friend或private。 结构中的每一个数据成员都必须显式声明。这意味着 “变量声明” 部分中的每一个语句都必须使用dim、 friend 、private或 public 。如果 option strict是 on ,则在每个语句中还必须包含as子句。用 dim 声明的成员的访问性默认为 public ,未用 as 子句声明的成员默认为object 数据类型。 变量、常量、属性、过程、事件均可作为结构的成员,但是,在结构中必须至少定义一个非共享变量或事件。在结构中不能只包含常数、属性和过程。(2)定义结构类型变量结构类型反映了所处理对象的抽象特征,如
46、上面例子定义的结构类型描述了学术团体中所有会员共有一些特点,而具体到每个会员时,则定义了一个结构类型变量member1来存放和处理这个会员的具体数据。结构类型变量(简称结构变量)的定义与普通变量的定义类似,格式如下: dim | public | private变量名 1,变量名 2,, ,变量名n as 结构名或简写为: dim | public | private变量名表列 as 结构名例如,在前面的例子中,定义了结构mail 的一个变量: dim member1 as mail 定义了一种结构类型后,可以用它定义多个具有相同结构的结构变量。例如,假定新增加一个会员,其姓名、通信地址等数据
47、如下表:编号姓名( name )职称 (title) 地址( arr )邮编( zip )电话 (tel) 2 张红讲师上海200237 65372486 11 member1和 member2两个变量可在同一行中定义,变量之间用“,”号分开,即: dim member1,member2 as mail (3)结构的嵌套结构内的成员可以是基本数据类型,如integer、string 、sing 型等,也可以是构造数据类型(如数组)。在前面定义的结构类型mail 中,只包含基本类型数据。结构成员还可以是已定义的另一个结构类型,称为结构的嵌套定义。例如,一个电话号码可分为地区号,直拨号和分机号三部
48、分。如下表:编号姓名职称通信地址邮编电话地区号直拨号分机号利用上表的数据,可以定义一个嵌套结构:public structure telephone public area as short 定义电话号码结构类型 public tel as integer 地区号,占2 个字节 public ext as short 分机号,占2 个字节end structure privage structure mail_embed 定义会员通信录结构类型 public num as short public name as string public title as string public add
49、r as string public zip as integer dim phone as telephone 定义结构成员phone end structure 其中 phone 是结构 mail_embed 的一个成员,这个成员被定义为另一种结构类型,这个结构类型描述了一个电话号码的各个部分。这样定义的电话号码可以方便地处理地区号、总机号和分机号,而且只占8 字节存储单元,比前面用字符数组的定义节省空间。要注意定义的顺序,在定义phone 为 telephone类型之前,结构类型telephone必须已定义过。3、结构变量的初始化及其引用(1)结构变量的初始化与普通变量一样,结构变量在使
50、用前也必须具有确定的值。对于结构变量来说,只能赋值语句对结构各个成员分别赋值。例如在前面的例中,定义了结构变量member1后,用下面语句: member1.num=1 m= ”王大明” member1.title=”教授” member1.addr=”北京” member1.zip=100084 member1.tel=”62781722”分别给 member1变量的各个成员赋值作为初值。(2)结构变量的引用及操作在定义了结构变量之后,就可以引用这个变量,进行赋值、运算输入和输出等操作,一般规则如下: 成员引用。结构由不同类型的成员组成,而通常参加运算的是结构变量中的各
51、个成员,引用时要在结构变量后面写上参加运算成员名,一般形式为:结构变量 . 成员名 嵌套引用。如果在嵌套结构中,一个结构的成员本身又是一种结构类型,同在引用时需要用多个成员运算符,按上述规则一级一级地找到最低的一级成员,最后对最低级的成员进行访问。例如,假定有如下的结构和结构变量定12 义:public structure telephone public area as short 定义电话号码结构类型 public tel as integer 地区号,占2 个字节 public ext as short 分机号,占2 个字节end structure privage structure
52、mail_embed 定义会员通信录结构类型 public num as short public name as string public title as string public addr as string public zip as integer dim phone as telephone 定义结构成员phone end structure 对嵌套定义的结构变量embed_mem1 ,访问其成员时可写成: embed_mem1.phone.area embed_mem1.phone.tel embed_mem1.phone.ext 成员变量的运算。结构成员变量根据其类型可以像
53、普通变量一样进行各种运算和输入输出。例如:member2.num=member1.mun+1 会员 1 的会员加1 作为会员2 的会员号num=member2.num+member1.num 累计已登录的会员数在上面的语句中,假定普通变量num与结构变量member1 、member2在同一个函数中,也定义为short类型,则它也被分配一个内存单元,但它不在分配给结构变量member1或 member2的内存范围内。因此,虽然num与 member1和member2的成员名num相同,但它们不会发生冲突。可以对结构变量成员进行各种运算,如算术、赋值、关系运算、逻辑运算等,允许其运算的种类与相同
54、类型的简单变量的运算种类相同。 整体赋值。 visual basic.net允许将一个结构变量作为一个整体赋值给一结构变量,如:member2=member1 这个赋值语句将结构变量member1中各个成员的值依次赋给结构变量member2中相应的各个成员。其前提条件是:这两个结构变量的类型相同,即二都中成员个娄、类型、长度的定义均相同。这一规则也适用于嵌套结构类型的变量。如:embed_mem1.phone=embed_mem2.phone 4、结构数组一个结构变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有 10 个学生的数据需要参加运算,显然应使用数组,这就是结构数组
55、。与数值型数组不同,结构数组的每个元素都是一个结构类型的数据,它们都分别包括各个成员项。前面我们定义了一个名为mail 的结构类型,用来描述一个学术团体中会员的有关通信联系等方面的属性,并先后定义了两个结构变量member1和 member2 ,分别存放会员“王大明”和“张虹”的一组数据。如果这个学术团体的会员有几百个,则可以把具有相同结构类型的变量组成一个数组,也下表:数组的每一个元素都是结构变量,这种数据类型称为结构数组。数组编号( num )姓名( name )职称( title)地址 (addr) 邮编 (zip) 电话 (tel) list(0) 8001 王大明教授北京100084
56、 62781722 list(1) 8002 张虹讲师上海200237 65372486 list(2) 8003 李洪华副教授天津300110 27639268 ,list(99) 800100 刘德荣ceo 高州5201314 1314520 定义结构数组的一般格式为: dim 数组名 ( 上界限 ) as 结构名13 例如,假定定义了以下常量和结构类型:const max_mem = 99 private structure mail 定义会员通信录结构类型 public num as short public name as string public title as string
57、public addr as string public zip as integer public tel as string end structure 则可以用下面的语句定义一个结构数组: dim list(max_mem) as mail 用上面的语句定义的结构数组名为list,它的上界为99,即存放100 个数组元素,每个数组元素都是一个结构变量。一个结构数组元素相当于一个结构变量,因此,前面介绍的关于结构变量的引用规则,同样适用于结构数组元素。而数组元素之间的关系和引用规则与以前介绍过的数值数组的规定相同。下面简单归纳几点,然后举例说明结构数组的引用方法和用途。(1)引用某一结构数
58、组元素的成员,用以下形式:结构数组名(下标) 成员名例如: list(2).num 引用的是数组list第三个元素的num(编号 ) 成员。(2)可以将一个结构数组元素赋给该结构数组中的另一个元素,或赋给同一类型的结构变量,例如下面的赋值语句是合法的:list(0)=list(1) 这两个数组元素都有同一结构类型,因此它符合结构的整体赋值规则。(3)不能把结构数组元素作为一个整体直接输入输出,如:debug.writeline(list(0) 是错误的。只能以单个成员为变量输入输出。debug.writeline(list(0).num) 集合在 visual basic.net 中,可以把数
59、据项放到集合(collection)对象中。它类似于数组,但可以用比数组更灵活、更有效的方式处理集合中的数据项(元素)。集合对象特别适合用来保存对象引用,同时也适合保存visual basic.net的其他数据类型。与数组相比,集合有着明显的优势,例如:集合比数组占用的内存少;集合具有更灵活的索引功能;集合提供了增加和删除成员的方法;当增加或删除一个集合中的成员时,不需要像数组那样执行redim 。在 visual basic.net中,集合类似于一个型数据库,可能很容易地插入或删除数据。同时,在集合中还可以混用多种不同的数据类型。为了更新或修改数组中的元素,有时候可能需要量编写大量的程序代码
60、。而在集合中可以十分方便地插入或删除种内容(控件除外)。此外,也可以把集合合作为数组使用。1、建立集合并向集合中添加项目和窗体一样,集合是一个预定义的对象,为了建立一个集合,必须选建立一个collection类的实例,格式为: dim 集合名 as new collection() 例如: dim x as new collection() 建立一个名为x的集合。对象集合可以目执行三种主要的操作,即向集合中添加(或插入)数据项,从集合中删除数据项和查找集合中的成14 员,这些操作通过下面的方法来实现:add 方法:向集合中增加项目;item 方法:通过索引或分健值返回一个项目;remove方法:通过索引或键值从集合中删除一个项目。除上述方法外,集合对象还有一个只读属性,即count,它返回集合中数据的个数。用 add 方法可以把一个新
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年士官职业技能提升报告范文
- 2025至2030年中国吡嘧磺隆可湿性粉剂行业投资前景及策略咨询研究报告
- 2025年男士化妆品市场调查报告
- 2025至2030年中国丙烯酸内墙耐水腻子行业投资前景及策略咨询研究报告
- 2025英语专业实训报告【三】
- 2025年整形机构项目申请报告模板
- 2025年模压成型设备项目提案报告
- 2025年大地测量仪器项目规划申请报告模范
- 2025年燃油系统:化油器项目申请报告模板
- 高校导师制学生培养计划
- 2024年宁波金融开发投资控股集团有限公司招聘笔试冲刺题(带答案解析)
- AQ-T 2073-2019 金属非金属矿山在用高压开关设备电气安全检测检验规范
- 中外政治思想史-形成性测试三-国开(HB)-参考资料
- 河北省课程思政示范课程、教学名师和团队申报书
- 医院保安服务项目组织机构与人员配备
- 2024年浙江湖州市城市投资发展集团招聘笔试参考题库含答案解析
- 高血压和心血管疾病的预防与管理
- 小学数学-水中浸物问题-完整版题型训练30题-带答案
- 中国大学生积极心理品质量表
- JCT908-2013 人造石的标准
- 浅谈屡查屡犯问题的成因及对策
评论
0/150
提交评论