咱们都知道在所有程序设计语言中数组都是一个很是重要的概念,数组的做用是赞成程序猿用同一个名称来引用多个变量,所以採用数组索引来区分这些变量。很是多状况下利用数组索引来设置一个循环,这样就可以高效地处理复杂的状况,所以在很是多状况下,使用数组可以缩短或者简化程序的代码。本文主要介绍VB.NET数组的使用,但愿对你们的使用带来帮助。 编程
数组中的第一个元素的下标称为下界,最后一个元素的下标称为上界,其他的元素连续地分布在上下界之间,并且数组在内存中也是用连续的区域来存储的,因此要求声明数组每维的长度不能超过Long数据类型的最大值,即264—1=263。 数组
咱们把VB.NET数组看成一个对象来处理,这就意味着数组类型是单个引用类型,数组变量包括指向构成数组元素、数组维和数组长度等数据的指针,数组之间互相赋值事实上仅仅是在相互复制指针,而且数组继承了System名字空间的Array类。函数
VB.NET中提供的数组类型和VB 6.0中有一些区别,咱们将在如下作具体的解说。spa
(1)VB.NET数组的声明操作系统
VB.NET中的数组有两种类型:定长数组和动态数组。这里先介绍定长数组的几种不一样的声明方式,不一样的声明方法将致使数组不一样的有效范围。设计
◆Dim语句在模块段创建模块级数组,好比:指针
- Dim arrayl(3)As Integer
◆Public语句在模块的声明部分创建一个公共数组,好比:server
- Public counttype(20)as string
◆Static语句声明一个过程内的局部数组,好比:xml
- Public Sub Ipaddress()
- Static server(30)as string
- End Sub
VB.NET还提供了新的数组初始化语法,仅仅需要简单的语句就可以完毕数组的声明和初始化,好比:对象
- New array initialization syntax
- Dim arrayl As Integer()={2,4,8}
在VB.NET中,为了和其它语言更加易于协同操做,数组的下标均设定为0,不一样意声明一个下界为1的数组,所以Option Base语句再也不被VB.NET支持,而且在声明一个数组时必须用它的元素个数,而不是它的上界来初始化,好比:
- //声明一个一维数组具备3个元素,下标从0~2
- Dim arrayl(3)As Integer
- arrayl(0):2
- arrayl(1)=4
- arrayl(2)=8
以上声明的数组有三个元素,下标从0到2,假设代码企图訪问下标为3的数组元素,将引发执行错误。
(2)二维数组及多维数组
除了较为简单的一维数组外,VB.NET还支持多维数组,其声明方法和一维数组没有太大的差异,好比:
- StatiC multidim(10,10)as double
- Public Singledim(5,8,10,3)as single
以上语句声明了一个lO行,10列的二维数组。在VB.NET中,数组最多有32维,而且每一维的长度都不能够超过Long数组类型的最大值。数组总尺寸的限制是不同的,这与所採用的操做系统以及计算机中使用的内存量有关。数组的维数将保留在System.Array.Rank属性中,每维的长度能够由System.Array.GetLengfll方法来获得。需要提醒注意的是,由于VB.NET中数组是以0为基的,假设返回来的值为9,则表示数组是10维的。当为数组继续加入维数的时候,使其扩展为多位数组,此时会使数组所需的存储空间大幅度添加,因此在使用多维数组时对这个方面也要多加考虑。
另外VB.NET还提供了Lbound()和Lbound()两个函数来返回数组的上、下界。中国自学编程网整理公布 ,www.zxbc.cn对于一维数组而言,仅仅需要一个參数,那即是数组名。好比:
- one==Ubound(arrayl)
对于多位数组,也仅仅是简单地将逗号后面的第二个參数指定为数组的第几维。好比:
- tw0=Lbound(multidim,7)
假设没有指明是哪一维,系统默以为第一维。
(3)动态数组
有时在程序执行以前没法确认数组的大小,VB.NET提供了在程序执行时动态决定数组大小的功能,即动态数组。它具备灵活多变的特色,可以在不论何时依据需要随时改变数组的大小,有助于内存的管理。创建一个动态数组的具体过程例如如下:
①和声明通常数组同样,可以使用前面介绍的几种声明,仅仅是赋一个空维数组,这样就将数组声明为动态数组。典型的声明语句为:
- Dim types( ) As integer
②而后使用ReDim语句来配置数组大小。ReDim语句声明仅仅能在过程其中使用,它是可运行语句,可以改变数组中元素的个数,但是却不可以改变数组的维数,就是说不能把一维变为二维。在ReDim语句配置数组元素个数时,数组中的内容将全部置为0。典型语句为:
- ReDim Types(X+1)
③假设想改变数组大小又不想丢失原来的数据,仅仅要在ReDim语句中包括Preservekeyword就可以,典型语句为:
- ReDa_m PresetVe Types(10,23)
对于多维数组,在使用Preservekeyword时,仅仅能改动最后一维的大小。假设改变其它维,那么将出现执行错误。假设不清楚某维的当前大小,可以使用GetI~ength函数来获取。
(4)VB.NET数组的使用
在’VB 6.0中,可以用For Each来循环遍历一个数组。好比:
- Dim x As Integer
- F0r Each x In arrayl
- Console.WriteLine(x)
- Next
在VB.NET中可以使用For循环和数组长度来遍历一个数组。好比:
- Dim i As工nteger
- F0r i=0 T0 (arrayl.Length-1)
- Console.WriteLine(arrayl(1)J
- Next i
在使用数组时还要注意,不只声明语法有变化,而且在执行时处理方式也有了很是大的变化。VB.NET在堆栈中给数组分配地址空间,当向一个方法传递数组类型的參数时,使用的是引用传递而不是值传递。如下是互相传递数组引用的三个方法:
- Dim arrayl(3,3)AS Integer
- Dim array2 As Integer(,)
- Redim array2(3,3)
- Dim array3 As Integer(,)={{2,4},{12,29}}
方法一在两个方向同一时候传递了数组引用,通常用来向调用者返回数组引用。方法二和方法三从调用者向方法的实现中传递了数组引用。方法二的參数被声明为一维数组,而在方法三中參数被声明成了-维数组。
(5)数组的高级特性
①数组的数组
在O~ect数组中还可以组装不一样类型的数组。好比,下面代码中先创建两个数组,一个是Integer类型,还有一个是String类型,而后再声明一个O~ect类型的数组,把前两个数组分装在当中。
- Dim I as integer
- //声明一个integer类型的数组
- Dim grade(15)as integer
- For i:0 tO 14
- Grade(i)=i
- NeXt i
- //声明一个string类型的数组
- Dim name(15)as String
- For i=0 tO 14
- Name(i):”Student”&cstr(i)
- Next i
- //声明一个新的数组为object,用来组装其它数组
- Dim Student(2)as object
- Student(0)=grade
- Student(1)=name
- Msgbox(student(0)(2)) //显示”2”
- Msgbox(student(1)(3)) //显示”student 3”。
上述代码中使用了student(0)和student(1)的后绑定。注意,仅仅有在Option s~ict被关闭时,VB.NET编译器才赞成使用后绑定。
②数组和集合
尽管集合通常用于操做对象,但是它也能操做数据类型。在某些条件下,其效率比数组还要高。咱们可以经过下面4个方面来进行比較。
◆集合可以依据需要进行扩充,不像数组那样需预先规定大小。
◆数组仅仅能保存声明时所定义的数据类型,但是同一个集合中可以存储不一样类型的数据。
◆集合元素的改动较为麻烦,不像数组那么方便。
◆处理集合的速度较数组慢,但是在处理较小的动态条目集,使用集合是最为理想的选择。