VBNET数据语法基础_第1页
VBNET数据语法基础_第2页
VBNET数据语法基础_第3页
VBNET数据语法基础_第4页
VBNET数据语法基础_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、数据类型<一>Integer整型类型内在分配(字节)数值范围Short2-32768~32767Int162-32768~32767UInt16(无符号)20~65535Integer4-2147483648~2147483647Int324-2147483648~2147483647UInt32(无符号)40~4294967295Long8-9223372036857755808~922337203687755807Int648-9223372036857755808~922337203687755807UInt64(无符号)80~184467440737095551615<二>浮点数浮点数也称实型数或实数,是带有小数部分的数值。它由三部分组成:符号、指数及尾数。单精度浮点数和双精度浮点数的指数分别用“E”(或“e”)和“D”(或“d”)来表示。(1)Single单精度浮点型这个类型用于存储单精度浮点型数字,占用4个字节,负数取值范围在-3.402823E+38~-14.401298E-45;正数取值范围在1.401298E+45~3.40282E38之间。(2)Double双精度浮点型一般浮点数字都存储为Double双精度浮点型,可以保证很高的精度,是最常用的浮点型数字类型,占用8个字节,范围在-1.79769313486231E308~-1.79769313486232E308之间。(3)Decimal十进制VB6.0支持Currency(贷币)数据类型,Currency变量以整数格式存储64位数字,以10000为标度,将数字表示为定点数,其小数左边为15位,右边为4位。VB6.0的Currency数据类型的精度不够,无法避免四舍五入的误差,因些在VB.NET引入了Decimal这种数据类型。VB.NET中将Currency数据类型转换为Decimal、Decimal变量存储带有符号(正负号)的96位整数。<三>字节/字符/字符串型(1)Byte字节型这个类型的数据是从0~255的无符号整数,用来声明二进制的变量,但显示的值为十进制的。如果要声明的变量包含二进制数据,通常将其声明为Byte型的数。例如经常用到的颜色三组合红黄蓝即RGB三颜色分量。(2)Char字符型这是VB.NET中的单字符数据类型,默认为字符是Unicode字符,占用2个字节。常常用来声明单字符的变量。如下:DimcharfirstAsCharCharfirst=”A”‘声明一个Char类型的变量charfirst,并且赋给了一个值A,字符用双引号包括(3)String字符串型使用下列语句来声明一个字符串变量:DimstrtextAsString可以在上述语句的最后面加上*,再加上一个正整数来指定这个字符串变量的长度。如下:DimstrtextAsString*20如果赋予字符串的长度超过了字符串的定长,那么VisualBasic.NET会自动截去超出的长度。<四>其它数据类型(1)Boolean布尔型布尔型数据表示“真(True)”或“假(False)”这样的一种二值状态,简单的就是计算机中的0和1,当没有为该类型变量赋值时,初始值为Flase或0。VB.NET的布尔值实际上有3个,+/-1都是True,而0为Flase的值。一般情况应尽量使用True或Flase直接赋值或参与运算而不用+/-1或0代替。这种变量只占1个字节。(2)Data日期型VB.NET中用Date型变量来保存日期信息。Data在内部存储为64位整数(注意这里的位指整数的位数而不是字节的位数)。如下:Dimdbdata1AsDataDbdata1=NOW()‘初始化dbdata1变量,得到当前日期。(3)Object对象数据类型VB.NET用Object数据类型代替了VB6.0的Variant变体数据类型。Object变量用作指向对象的指针。Object对象数据类型有几个特殊值。1、Error值:指出已发生的过程中的错误状态。2、DBNull值:空值,通常用于数据库应用程序,表示未知数据或丢失的数据。可以用ISBNull函数测试Object对象数据类型变量是否包含DBNull值。如下:IfISDBNull(x)andISNull(y)then2=DBNullThen2=0Endif3、Nothing值:有时需要知道是否已将一个值赋予所创建的变量。在赋值之前,Object对象类型变量具有值Nothing(也是空值,但表示什么都没有)。值Nothing是不同于0,零长度字符(“”)或DBNull值的特定值。当式中使用它,将其作为0或零长度字符串来处理,这要根据表达式来定。只要将任何值包括0,零长度字符串或DBNull()赋予Object对象类型变量,Nothing值就会消失。而将关键字Nothing赋予Object对象类型变量,就可将object对象类型变量恢复为Nothing。(4)枚举类型在程序设计中,有些数据无法直接用整型数或浮点型数来表示,必须经过某种转换,把本来不是简单地用整数来表示的问题硬用几个整数去描述,因而降低了程序的可读性。为此,VisualBasic.NET提供了枚举数据类型。当一个变量只有向种可能的值时,可以定义为枚举类型。所谓“枚举”,是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。声明格式如下:[Public|Private]Enumname[AsType]membname1[=initexpr1]membname2[=initexpr2]…membnamen[=initexprn]EndEnum参数说明如下:1、Public:可选。表示所定义的Enum类型在整个项目中都是可见的,在默认情况下,Enum类型被定义为Public。2、Private:可选。表示所定义的Enum类型只在声明的模块中是可见的。3、Enum:声明该枚举类型的关键字。4、name:所定义的Enum类型的名称,必须合乎VB.NET的命名规则,在定义Enum类型的变量或参数时用该名称来指定类型。5、type:可选。用来声明枚举及其所有成员的数据类型,可以是Byte、Integer等。如果不指定type,则默认为Integer。6、membname:枚举成员的名称。7、initexpr:可选。为创建枚举成员时计算和分配给该成员的表达式,该表达式可以包含文本、已定义的常数,另一枚举成员或文本、常数和枚举成员的任何组合,但不能在这个表达式里使用变量或函数,只能适当使用一些强制类型转换函数。下面给出一些声明枚举变量的实例:1、在Enum语句的格式中“initexpr”可以省略。在默认情况下,枚举中的第一个常数被初始化为0,其后的常数则初始化为比其前面的常数大1的数值。如:PublicEnumDaysSumdayMondayTuesdayWednesdayThursdayFridaySaturdayEndEnum定义了一个枚举类型Days,它包括7个成员,都略了“initexpr”,因此常数Sunday的值为0,常数Monday的值为1,常数Tuesday的值为2,等等。2、可以用赋值的语句显式地给枚举中的常数赋值,即不省略“initexpr”。所赋值可以是任何长整数,包括负数。如果希望用于小于0的常数代表出错条件,则可以给枚举常数赋一个负值。如:PublicEnumWorkDsysSaturdaySunday=0MondayTuesdayFridayInvalid=-1EndEnum在上面的枚举中,常数Invalid显式地赋值-1,而常数Sunday被赋值0。因为Saturday是枚举中的第一个元素,所以也被赋值0。Monday的数值为1(比Sunday的数值大1),Tuesday的数值为2等等。3、VisualBasic.NET将枚举中的常数数值看作整数。如果将一个浮点数值赋给一个枚举中的常数,VisualBasic.NET会将该数值取整为最接近的整数。4、当对一个枚举中的常数赋值时,可以使用另一个枚举中的数值。PublicEnumWorkDaysSunday=0MondayTuesdayWednesdayThursdayFridaySaturday=Days.Sturday-6Invalid=-1EndEnum这里的Days枚举的声明与前面的声明等同。注意:Enum语句只能在模块、命名空间或文件级出现。这就是说可以在源文件中或者在模块、类或结构内部声明枚举,但不能在过程内部进行声明。在定义Enum类型之后,就可以将其用于声明变量类型,过程参数和Function返回值。二、复合数据类型迄今为止,我们使用的都是属于基本数据类型或简单数据类型(字符串、整型、实型等)的数据,可以通过简单变量名来访问它们的元素。除基本数据类型外,VisualBasic.NET还提供了复合数据类型,包含数组、结构和集合。复合数据类型是按照一定规则组成的元素类型的数据,元素类型又称基类型,它可以是简单数据类型,也可以是复合数据类型。对于复合数据类型来说,不能用一个简单变量名来访问它的某个元素。<一>数组在实际应用中,常常需要处理同一类型的成批数据。例如,为了处理100个学生某门课程的考试成绩,可以用S1、S2、S3……S100来分别代表每个学生的分数,其中S1代表第一个学生的分数,S2代表第二个学生的分数……。这里的S1、S2…、S100是带有下标的变量,通常称为下标变量。显然,用一批具有相同名字、不同下标的变量来表示同一属性的一组数据,能更清楚地表示它们之间的关系。在VisualBasic.NET中,把一组具有同一名字、不同下标的下标变量称为数组。如:Str(8)。其中S称为数组名,8是下标,上标为0。一个数组,如果只用一个下标就能确定一个数组元素在数组中的位置,则称为一维数组。而由两个或多个下标变量所组成的数组称为二维数组或多维数组。1、静态数组在VisualBasic.NET里,数组下界总是从0开始,不能改变,并且它们基于数组中的元素的数量被定义。如:Dimintmyarray(10)AsInteger该元素从intmyarray(0)开始,直到intmyarray(10)结果,共11个元素。2、动态数组数组到底应该有多大才合适,有时可能不得而知,所以希望能够在运行时具有改变数组维数大小的能力。VisualBasic.NET中,固定大小数组通过Dim语句声明,在些语句中必须指出数组的维数及大小。动态数组也是先在Dim语句中声明,但不指定大小,只需要声明其类型,即数组名后的()内为空,最多只有“,”分隔开每个维。声明定义之后的数组还不能直接赋值。在使用动态数组之前,再通过ReDim语句重新确定动态数组上界大小,Rem之后才可以赋值或参与运算。VisualBasic.NET中的ReDim语句仅用于为数组分配或重新分配空间,而不能重新声明数组,一旦在最开始用Dim语句确定了其维数之后,就再也不能改变其维数的数目。如从二维扩大到三维,或从三维退到一维,唯一能改变的就是数组的大小,即数组上下界。另外,也不能通过ReDim改变数组类型。动态数组以变量作为下标值,在程序运行过程中完成定义,通常分为两步:首先用Dim或Public声明一个没有下标的数组(括号不能省略),然后在过程中用ReDim语句定义带下标的数组。如:DimTestVar()AsIntegerDimSIntegerPrivateSubBubbon1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EvenArgs)HandlesButton1.Click)S=InputBox(“请输入数组大小”,”数组输入”,”10”ReDimTesVar(S)……EndSub该例先在窗体层用Dim语句声明了一个空数组TesVar和一个变量S,然后在按钮事件过程中用ReDim语句定义该数组,下标S在运行时输入。ReDim语句的一般格式为:ReDim[Preserve]变量(下标)该语句用来重新定义动态数组,按定义的上界重新分配存储单元。当重新分配动态数组时,数组中的内容被清除,但如果ReDim语句使用了Preserve选择项,则不清除数组内容。在ReDim语句中可以定义多个动态数组,但每个数组必须事先用DimVariable()(一维数组)或DimVariable(,)(二维数组)这种形式进行声明,在括号中省略上界,在用ReDim语句重新定义时指定数组下标的上界。如:DimStuName(),Address(),City()AsStringReDimStuName(sn),Address(sn),City(sn)ReDim只能出现在事件过程或通用过程中,用它定义的数组是一个“临时”数组,即在执行数组所在的过程时为数组开辟一定的内存空间,当过程结束时,这部分内存即被释放。对动态数组的具体说明如下:(1)动态数组分两次定义,第一次用Dim、Public、Private等语句定义,只有类型,不指定维数;第二在ReDim语句定义,给出具体的维数和上界。对于一维数组来说,第一次定义时,数组名的后面带有一对圆括号,例如temp();而对于二维数组来说,第一次定义时,数组名后面的圆括号中有一个逗号,例如temp(,),依此类推。(2)可以多次用ReDim语句定义同一个数组,随时修改数组中元素的个数,例如:PrivateSubButton1_Click(ByvalsenderAsSystem.Object,ByValeAsSystem.EvenArgs)HandlesButton1.ClickDimtemp()AsStringRemTemp(4)Temp(2)=”Microsoft”Msgbox(temp(2))ReDimtemp(6)Temp(5)=”VisualBasic.NET”Msgbox(temp(5))EndSub在事件过程中,开始时用ReDim定义的数组Temp有5个元素,然后再一次用ReDim把temp数组定义为7个元素。但是注意,只能改变元素的个数,不能改变数组的维数。(3)在用ReDim重新定义动态数组时,可以使用可选的Preserver关键字。如果不使用该关键字,则原来数组中的数据将被清除,而如果使用了该关键字,则原来数组中的数据将被传送到新建立的数组中。3、数组的清除和重定义数组一经定义,便在内在中分配了相应的存储空间,其大小是不能改变的。也就是说,在一个程序,同一个数组只能定义一次。有时候,可能需要清除数组的内容或对数组重新定义,这时可以用Erase语句实现。格式为:Erase数组名[,数组名]…Erase语句用来重新初始化静态数组的元素,或者释放动态数组的存储空间,它只能出现在过程中。注意,在Erase语句中,只给出要刷新的数组名,不带括号和下标。例如:EraseTest对数组清除和重定义的具体说明如下。(1)当把Erase语句用于静态数组时,如果这个数组是数值数组,则把数组中的所有元素置为0;如果是字符串数组,则把所有元素置为空字符串;如果是结构数组,则根据每个元素(包括定长字符串)的类型重新进行设置。如下表:Erase语句对静态数组的影响数组类型Erase对数组元素的影响数值数组将每个元素设为0字符串数组(变长)将每个元素设为零长度字符串(“”)Object数组将每个元素设为Empty结构数组将每个元素作为单独的变量来设置对象数组将每个元素设为Nothing(2)当把Erase语句用于动态数组时,将删除整个数组结构并释放数组所占用的内存。也就是说,动态数组经Erase后即不复存在;而静态数组经Erase后仍然存在,只是其内容被清空。(3)Erase释放动态数组所使用的内存。在下次引用该动态数组之前,必须用ReDim语句重新定义该数组。例:编写程序,试验Erase语句的功能。PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimTest(10),iAsIntegerDebug.WriteLine(“”)Fori=0to10Test(i)=iDebug.Write(Str(Test(i))&“”)NextiEraseTestDebug.WriteLine(“”)Debug.WriteLine(“EraseTest()”)ReDimTest(12)Fori=0to12Debug.Write(Str(Text(i))&“”)NextiDebug.WriteLine(“”)Debug.WriteLine(“”)EndSub在上面的事件过程,定义了一个数组Text,用For循环语句为每个元素赋值,并输出每个元素的值,然后执行Erase语句,将各元素的值清除,再用ReDim语句重新定义数组Text,使得每个元素的值为0。ReDim是不能直接定义数组的,但从这个例子可以看出,在用Erase清除一个数组后,可以用ReDim语句重新定义该数组。4、默认数组与嵌套数组在VisualBasic.NET中,允许定义默认数组,并可用一个数组作为另一个数组的元素,即数组嵌套。(1)默认数组默认数组就是默认数据类型的数组。在一般情况下,定义数组应指明其类型,如:StaticElec(100)AsInteger定义了一个数组Elec,该数组的类型为整型,它有101个元素,每个元素都是一个Integer数。如果把上面的定义改为:StaticElec(100)则定义的数组是默认数组,其类型默认为Object,因此,该定义等价于:StaticElec(1to100)AsObject从表面上看,定义默认数组似乎没有什么意义,实际上不然。几乎在所有的程序设计中,一个数组各个元素的数据类型都要求相同,即一个数组只能存放同一种类型的数据。而对于默认数组来说,同一个数组中可以存放各种不同的数据。因此,默认数组可以说是一种“混合数组”。请看下例:编写程序,试验默认数组的功能。PrivateSubForm1_Click(ByValsenderAsObject,ByValAsSystem.EvenArgs)HandlesMyBase.ClickStaticDefau(5)DimiAsShortDebug.WriteLine(“”)Defau(0)=”清华大学”Defau(1)=100Defau(2)=234.56Defau(3)=”BeiJing”Defau(4)=NowDefau(5)=&HAAFFori=0to5Debug.WriteLine(“Defau(“&i&“)=“&Defau(i))NextiEndSub该事件过程定义了一个表态数组Defau(默认数组一般应定义为静态的),然后对各元素赋予不同类型的数据,包括整形、实型、日期和时间类型及十六进制整型。(1)嵌套数组在一般情况下,数组元素是一个具体的数据。而在VisualBasic.NET中,可以用数组作为另一个数组的元素,这样的数组称为嵌套数组。注意,嵌套数组必须是默认数组(即Object类型),而被嵌套的数组必须是标准数据类型数组。在实际应用中,通常把整个被嵌套数组赋给嵌套数组中的某个元素,在赋值语句中写上被嵌套数组的名字,后面加上一对空括号。例如:Dima(4)AsIntegerDimb(2)Fori=1to4a(i)=i*iNextib(1)=a()该例首先定义了两个数组,其中a为整型数组,b为默认数据类型(即Object)数组,在循环语句中为数组a各元素赋值,然后执行“b(1)=a()”,即可把数组a作为数组b的第一个元素。在这种情况下,数组a中的各元素可以这样表示:b(1)(1)b(1)(2)b(1)(3)b(1)(4)5、数组的初始化定义数组的目的在于使用数组。而为了使用数组,就要给数组的各个元素赋初值,然后引用指定的元素。在使用数组时,通常要求数组有初值。当然可以用赋值语句或输入语句使数组中的元素得到值,但这样做会占用运行时间。为些,VisualBasic.NET允许在定义数组时对各元素指定初始值,称为数组的初始化。在VisualBasic6.0以前的版本中,数组元素的初始值用Array函数实现,而在VisualBasic.NET中,给数组赋初始值的方法与C语言类似。(1)一维数组的初始化:Dim数组名()As类型={值1,值2,值3,……,值n}VisualBasic.NET不允许对显式指定上界的数组进行初始化,因此“数组名”后面的括号中必须为空,根据具体初值的个数确定数组的上界,需要赋给各元素的初值放在等号后面的花括号中,数据之间用逗号隔开。如:Dima()AsShort={2,4,6,8,10}定义了一个Short型数组a,该数组有5个初值,因此数组的上界为4,即a(4)。经过上述定义和初始化后,把花括号中的值依次赋给各数组元素,使得a(0)=2,a(1)=4,a(2)=6,a(3)=8,a(4)=10。类似地,对字符串数组也可以初始化。如:Dimc()AsString={“Liu”,”De”,”Rong”}定义了一个字符串数组c,该数组有3个初值,因此数组的上界为2,即c(3)。经过上述定义和初始化后,把花括号中的值依次赋给数组元素,使得c(0)=”Liu”,c(1)=”De”,c(2)=”Rong”(2)二维数组的初始化:Dim数组名(,)As类型={{第一行值},{第二行值},……,{第n行值}}如:Dimarr(,)AsShort={{1,2,3,4},{5,6,7,8},{9,10,11,12}}定义了一个二维数组,它有3行4列,即arr(2,3)。(3)多维数组的初始化:与二维数组的相同。6、ForEach……Next语句ForEach……Next语句类似于For…Next语句,两者都用来执行指定重复次数的一组操作。但ForEach…Next语句专门用于数组或对象“集合”,其一般格式为:ForEach成员In数组循环体[ExitFor]……Next[成员]这里的“成员”是一个Object变量,它是为循环提供的,并在ForEach…Next结构中重复使用,它实际上代表的是数组中的每个元素。“数组”是一个数组名,没有括号和上下界。用ForEach…Next语句可以对数组元素进行处理,包括查询、显示或读取。它所重复执行的次数由数组中元素的个数确定,也就是说,数组中有多少个元素,就自动重复执行多少次。如:DimMyArray(5)DimxAsShortForEachxInMyArrayDebug.Write(x)Nextx将重复执行6次(因为数组MyArray有6个元素),每次输出数组的一个元素的值。这里的X类似于For…Next循环中的循环变量,但不需要为其提供初值和终值,而是根据数组元素的个数确定执行循环体的次数。此外,x的值处于不断的变化之中,开始执行时,x是数组第一个元素的值,执行完一次循环体后,x变为数组第二个元素的值…,当x为最后一个元素的值时,执行最后一次循环。x是一个Object变量,它可以代表任何类型的数组元素。可以看出,在数组操作中,ForEach…Next语句比For…Next语句更方便,因为它不需要指明结束循环的条件。<二>结构结构是一种较为复杂但非常灵活的复合数据类型,一个结构类型可以由若干个称为成员(或域)的成分组成。根据需要,不同的结构类型可以包含不同的成员。在程序设计中,结构有着重要的作用。1、引例在实际应用中,有时候需要将不同的数据组合成一个有机的整体,以便于引用。这些组合在一个整体中的数据是互相联系的。例如,在一个学术团体中,为了与会员进行联系,需要建立一个会员通信录,这个通信录包括会员证号(num)、姓名(name)、职称(tilte)、通信地址(addr)、邮政编码(zip)和电话号码(tel)等数据,每种数据的类型和长度不同,但都反映出会员有关通信方面的属性,因此用程序处理这些数据时,也希望构造出一种能把上述属于不同类型的数据作为一个整体来处理的数据类型。使用VisualBasic.NET中的“结构”,可以定义如下:PublicStucturemailPublicnumAsShort‘会员证号(短整型)PublicnameAsString‘姓名(字符串)PublictitleAsString‘职称(字符串)PublicaddrAsString‘通信地址(字符串)PubliczipAsInteger‘邮政编码(整型)PublictelAsString‘电话号码(字符串)EndStructure上面定义了一个结构类型,其中Structure是VisualBasic.NET关键字,main是“结构名”,在Structuremain和EndStructure之间的部分是该结构中的各个成员,每个成员称为结构中的一个域,以分号隔开,由它们组成一个结构。上面定义了一个结构类型,我们可以建立一个会员通信录。假定会员王大明已经登录了与他通信联系有关的数据,遇可以编写一个包含些结构的程序来处理这些数据。王大明有关信息编号姓名(name)职称(title)地址(arr)邮编(zip)电话(tel)1王大明教授北京10008462781722用结构类型记录和显示会员王大明有关通信联系的信息。PublicStructuremainPublicnumAsShortPublicnameAsStringPublictitleAsStringPublicaddrAsStringPubliczipAsIntegerPublictelAsStringEndStructurePrivateSubForm1_Click(ByValSenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBse.ClickDimmember1Asmail‘定义结构变量DimspaAsString=””‘对结构各个成员赋值Member1.num=1M=”王大明”Member1.title=”教授”Member1.addr=”北京”Member1.zip=100084Member1.tel=”62781722‘通过结构变量分别引用结构的各个成员Debug.WriteLine(“”)Debug.write(“numnametitleaddr”)Debug.WriteLine(“ziptel”)Debug.Write(“-----------------------------------------“)Debug.WriteLine(“---------------------------------“)Debug.Write(“”&member1.num&spa&)Debug.Write(spa&mamber1.title&““&spa&member1.addr)Debug.WriteLine(““&member1.zip&spa&member1.tel)EndSub这个程序很简单,但它是一个能在机器上运行的程序,其中所涉及的结构变量的定义、赋值和引用等操作将在后面详述,读者先初步理解这个程序,如果能上机运行一下,则对理解后面的内容会有所帮助。2、结构类型与结构变量的定义(1)定义结构类型的一般格式如下:[{Public|Friend|Private|Dim}]Structure结构名变量声明[过程声明]EndStructure结构类型的定义以Structure开始,以EndStructure结束,格式中各部分的含义如下:①Public或Dim:可选。用Public关键字声明的结构具有公共访问权限。对于公共结构的可访问性没有任何限制。②Friend:可选:用Friend关键字声明的结构具有友元访问权限,可以从包含其声明的程序中以及同一程序集中的其他任何地方访问它们。③Private:可选。用Private修饰符声明的结构具有私有访问权限,只能在同一模块中访问。④结构名:必需。要定义的结构的名称,必须是有效的VisualBasic.NET标识符。⑤变量声明:必需。一个或多个Dim、Private或Public语句,声明作为结构的数据成员的变量或事件。这些声明与普通变量声明一样,遵循相同的规则。也可以在结构中定义常数或属性,但必须至少声明一个变量或事件。⑥过程声明:可选:作为结构的方法成员的0个或多个Function、Property或Sub过程的声明。这些声明与在结构外一样,遵循相同的规则。上面格式中的Structure是VisualBasic.NET的关键字,表示要定义的类型是结构,“结构名”是程序设计者自己取的名字,它应该是VisualBasic.NET合法的标识符,如前面例子中定义的会员通信结构类型中的“mail”。Structrue和“结构名”之间至少要有一个空格。在Structur和EndStructure之间的部分是该结构的成员,一个结构内至少要有一个变量声明或事件声明成员,每一个成员秒为结构中的一个域,成员名的命名规则与变量名相同,但不能称为变量名,具体原因后面还要谈到。所有成员组成“成员表列”,也称为“域表”。因此,结构定义的一般形式也可以写成:Structure结构名成员表列EndStructure使用结构时应注意如下事项。①Structur语句只能在模块、名称空间或文件级出现。也就是说,可以在源文件或模块、接口或类内部声明结构,但不能在过程内部声明。结构可以嵌套,即可以在一个结构中定义另一个结构,但不能通过外部结构访问内部结构的成员,必须声明一个内部结构的数据类型变量。②默认情况下,结构为Friend。如果要具体地指定可访问性,则应在Structure语句中含有Public、Friend或Private。③结构中的每一个数据成员都必须显式声明。这意味着“变量声明”部分中的每一个语句都必须使用Dim、Friend、Private或Public。如果OptionStrict是On,则在每个语句中还必须包含As子句。用Dim声明的成员的访问性默认为Public,未用As子句声明的成员默认为Object数据类型。④变量、常量、属性、过程、事件均可作为结构的成员,但是,在结构中必须至少定义一个非共享变量或事件。在结构中不能只包含常数、属性和过程。(2)定义结构类型变量结构类型反映了所处理对象的抽象特征,如上面例子定义的结构类型描述了学术团体中所有会员共有一些特点,而具体到每个会员时,则定义了一个结构类型变量member1来存放和处理这个会员的具体数据。结构类型变量(简称结构变量)的定义与普通变量的定义类似,格式如下:{Dim|Public|Private}变量名1,变量名2,……,变量名nAs结构名或简写为:{Dim|Public|Private}变量名表列As结构名例如,在前面的例子中,定义了结构mail的一个变量:Dimmember1Asmail定义了一种结构类型后,可以用它定义多个具有相同结构的结构变量。例如,假定新增加一个会员,其姓名、通信地址等数据如下表:编号姓名(name)职称(title)地址(arr)邮编(zip)电话(tel)2张红讲师上海20023765372486Member1和member2两个变量可在同一行中定义,变量之间用“,”号分开,即:Dimmember1,member2Asmail(3)结构的嵌套结构内的成员可以是基本数据类型,如Integer、String、Sing型等,也可以是构造数据类型(如数组)。在前面定义的结构类型mail中,只包含基本类型数据。结构成员还可以是已定义的另一个结构类型,称为结构的嵌套定义。例如,一个电话号码可分为地区号,直拨号和分机号三部分。如下表:编号姓名职称通信地址邮编电话地区号直拨号分机号利用上表的数据,可以定义一个嵌套结构:PublicStructuretelephonePublicareaAsShort‘定义电话号码结构类型PublictelAsInteger‘地区号,占2个字节PublicextAsShort‘分机号,占2个字节EndStructurePrivageStructuremail_embed‘定义会员通信录结构类型PublicnumAsShortPublicnameAsStringPublictitleAsStringPublicaddrAsStringPubliczipAsIntegerDimphoneAstelephone‘定义结构成员phoneEndStructure其中phone是结构mail_embed的一个成员,这个成员被定义为另一种结构类型,这个结构类型描述了一个电话号码的各个部分。这样定义的电话号码可以方便地处理地区号、总机号和分机号,而且只占8字节存储单元,比前面用字符数组的定义节省空间。要注意定义的顺序,在定义phone为telephone类型之前,结构类型telephone必须已定义过。3、结构变量的初始化及其引用(1)结构变量的初始化与普通变量一样,结构变量在使用前也必须具有确定的值。对于结构变量来说,只能赋值语句对结构各个成员分别赋值。例如在前面的例中,定义了结构变量member1后,用下面语句:Member1.num=1M=”王大明”Member1.title=”教授”Member1.addr=”北京”Member1.zip=100084Member1.tel=”62781722分别给member1变量的各个成员赋值作为初值。(2)结构变量的引用及操作在定义了结构变量之后,就可以引用这个变量,进行赋值、运算输入和输出等操作,一般规则如下:①成员引用。结构由不同类型的成员组成,而通常参加运算的是结构变量中的各个成员,引用时要在结构变量后面写上参加运算成员名,一般形式为:结构变量.成员名②嵌套引用。如果在嵌套结构中,一个结构的成员本身又是一种结构类型,同在引用时需要用多个成员运算符,按上述规则一级一级地找到最低的一级成员,最后对最低级的成员进行访问。例如,假定有如下的结构和结构变量定义:PublicStructuretelephonePublicareaAsShort‘定义电话号码结构类型PublictelAsInteger‘地区号,占2个字节PublicextAsShort‘分机号,占2个字节EndStructurePrivageStructuremail_embed‘定义会员通信录结构类型PublicnumAsShortPublicnameAsStringPublictitleAsStringPublicaddrAsStringPubliczipAsIntegerDimphoneAstelephone‘定义结构成员phoneEndStructure对嵌套定义的结构变量embed_mem1,访问其成员时可写成:embed_mem1.phone.areaembed_mem1.phone.telembed_mem1.phone.ext③成员变量的运算。结构成员变量根据其类型可以像普通变量一样进行各种运算和输入输出。例如:Member2.num=member1.mun+1‘会员1的会员加1作为会员2的会员号Num=member2.num+member1.num‘累计已登录的会员数在上面的语句中,假定普通变量num与结构变量member1、member2在同一个函数中,也定义为Short类型,则它也被分配一个内存单元,但它不在分配给结构变量member1或member2的内存范围内。因此,虽然num与member1和member2的成员名num相同,但它们不会发生冲突。可以对结构变量成员进行各种运算,如算术、赋值、关系运算、逻辑运算等,允许其运算的种类与相同类型的简单变量的运算种类相同。④整体赋值。VisualBasic.NET允许将一个结构变量作为一个整体赋值给一结构变量,如:member2=member1这个赋值语句将结构变量member1中各个成员的值依次赋给结构变量member2中相应的各个成员。其前提条件是:这两个结构变量的类型相同,即二都中成员个娄、类型、长度的定义均相同。这一规则也适用于嵌套结构类型的变量。如:embed_mem1.phone=embed_mem2.phone4、结构数组一个结构变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应使用数组,这就是结构数组。与数值型数组不同,结构数组的每个元素都是一个结构类型的数据,它们都分别包括各个成员项。前面我们定义了一个名为mail的结构类型,用来描述一个学术团体中会员的有关通信联系等方面的属性,并先后定义了两个结构变量member1和member2,分别存放会员“王大明”和“张虹”的一组数据。如果这个学术团体的会员有几百个,则可以把具有相同结构类型的变量组成一个数组,也下表:数组的每一个元素都是结构变量,这种数据类型称为结构数组。数组编号(num)姓名(name)职称(title)地址(addr)邮编(zip)电话(tel)List(0)8001王大明教授北京10008462781722List(1)8002张虹讲师上海20023765372486List(2)8003李洪华副教授天津30011027639268…List(99)800100刘德荣CEO高州52013141314520定义结构数组的一般格式为:Dim数组名(上界限)As结构名例如,假定定义了以下常量和结构类型:ConstMAX_MEM=99PrivateStructuremail‘定义会员通信录结构类型PublicnumAsShortPublicnameAsStringPublictitleAsStringPublicaddrAsStringPubliczipAsIntegerPublictelAsStringEndStructure则可以用下面的语句定义一个结构数组:Dimlist(MAX_MEM)Asmail用上面的语句定义的结构数组名为list,它的上界为99,即存放100个数组元素,每个数组元素都是一个结构变量。一个结构数组元素相当于一个结构变量,因此,前面介绍的关于结构变量的引用规则,同样适用于结构数组元素。而数组元素之间的关系和引用规则与以前介绍过的数值数组的规定相同。下面简单归纳几点,然后举例说明结构数组的引用方法和用途。(1)引用某一结构数组元素的成员,用以下形式:结构数组名(下标).成员名例如:List(2).num引用的是数组list第三个元素的num(编号)成员。(2)可以将一个结构数组元素赋给该结构数组中的另一个元素,或赋给同一类型的结构变量,例如下面的赋值语句是合法的:List(0)=list(1)这两个数组元素都有同一结构类型,因此它符合结构的整体赋值规则。(3)不能把结构数组元素作为一个整体直接输入输出,如:Debug.WriteLine(list(0))是错误的。只能以单个成员为变量输入输出。Debug.WriteLine(list(0).num)<三>集合在VisualBasic.NET中,可以把数据项放到集合(Collection)对象中。它类似于数组,但可以用比数组更灵活、更有效的方式处理集合中的数据项(元素)。集合对象特别适合用来保存对象引用,同时也适合保存VisualBasic.NET的其他数据类型。与数组相比,集合有着明显的优势,例如:集合比数组占用的内存少;集合具有更灵活的索引功能;集合提供了增加和删除成员的方法;当增加或删除一个集合中的成员时,不需要像数组那样执行ReDim。在VisualBasic.NET中,集合类似于一个型数据库,可能很容易地插入或删除数据。同时,在集合中还可以混用多种不同的数据类型。为了更新或修改数组中的元素,有时候可能需要量编写大量的程序代码。而在集合中可以十分方便地插入或删除种内容(控件除外)。此外,也可以把集合合作为数组使用。1、建立集合并向集合中添加项目和窗体一样,集合是一个预定义的对象,为了建立一个集合,必须选建立一个Collection类的实例,格式为:Dim集合名AsNewCollection()例如:DimXAsNewCollection()建立一个名为X的集合。对象集合可以目执行三种主要的操作,即向集合中添加(或插入)数据项,从集合中删除数据项和查找集合中的成员,这些操作通过下面的方法来实现:Add方法:向集合中增加项目;Item方法:通过索引或分健值返回一个项目;Remove方法:通过索引或键值从集合中删除一个项目。除上述方法外,集合对象还有一个只读属性,即Count,它返回集合中数据的个数。用Add方法可以把一个新成员加入到集合对象。用关键字New建立了一个集合对象后,就可以用Add方法向集合中添加数据项。格式为:Object.Add.item[,Key][,Before][,After]Add方法带有多个参数,各参数含义如下:object:用New关键字建立的集合对象。item:加到集合中的数据项,可以是任何类型。如果要显式声明,则通常把它声明为对象(object)数据类型。这就是说,在一个集合中,可以混用多种数据类型。Key:是一个字符串表达式,它是与集合成员相关联的关键字,可以作为索引值使用,用来标识集合中一个成员。Before:是一个长整型的数值表达式,其取值范围为1到成员总数(即Count属性值)之间,用来指定插入或删除集合成员的位置,插入或删除的成员位于Before参数指定的成员之前。该参数也可以使用字符串,它与相应成员的关键字匹配。After:与Before类似,但插入或删除的成员位于After参数指定的成员之后。在上面的参数中,Object是集合对象,必须先定义。后面4个参数中,只有Item,只有Item参数是必需的,其他三个参数均可略。用下面的程序可以把数据项加到集合中:PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.ClicDimiAsShortDimMyNamesAsNewCollection()DimxFori=1to10MyNames.Add(Item:=”Name”&i,Key:”Key#”&i)NextiEndSub该例首先声明了一个集合对象MyName,单击窗体,即可把10个数据项加到MyNames集合中。每个数据项都以“Name”开头,后面跟着一个数字。第一个数氨基同为”Naem1”,第二个数据项为“Name2”,……,最后一个数据项为“Name10”MsgBox(MyNames(3))MsgBox(MyName(“Key#8”分别输出Name3和Name8,前一个语句通过下标访问集合成员,而后一个语句通过关键字访问集合成员。为了输出集合中的每个成员可以使用For…Next循环,例如:PivateSubForm1_Click(ByValsenderAsObject,ByValcAsSystem.EventArgs)HandelesMyBase.ClickDimiAsShortDimMyNamesAsNewCollection()Fori=1To10MyNames.Add(Item:=”Name”&i,Key:=”Key#”&i)NextiFori=1to10Debug.WriteLine(MyNames(i))NextEndSub上述程序首先把10具数据项加到集合中,然后用For…Next循环输出这10个数据项。可以看出,这种方式与数组元素的输出操作基本相同。当确切地知道集合中的成员个数时,用For…Next循环可以输出集合中的每个成员。但是,如果频繁地对集合进行增、删操作,则可能记不清集合中到底有多少成员在这种情况下,可以通过Count属性确定集合中的成员个数。在上面的例子中,可以用MyNames.Count作为循环的组终值。不过,最好的办法是使用ForEach…语句。例如,用下面的ForEach…Next循环可以输出前面建立的集合中的成员:ForEach成员In数组Debug.WriteLine(elem)Nextelem建立集合时应注意如下事项。集合中的成员可以是同一种类型的数据,也可以混合使用多种数据。例如:PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.ClickDimanyTypeAsNewCollection()Dimx,aAsObjectX=”VisualBasic.NET”anyType.Add(x)x=246anyType.Add()anyType.Add(Now)anyType.Add(9876.5436)anyType.Add(“微型计算机”)ForEacyaInanyTypeDebug.WriteLine(a)NextaEndSub上述程序把多种类型的数据加入集合中,然后在“输出”窗口中提示这些数据。Add方法中的参数可能使用“位置”结合方式,也中以使用“指名”结合方式。如果使用位置结合方式,则必须按Item、Key、Before、After的顺序给出;而如果使用指名方式,可以不按顺序,但必须给出参数的名字,并使用“:=”。例如:PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.ClickDimxAsObjectDimy,iAsShortDimMyNamesAsNewCollection()y=1Fori=1to10MyNames.Add(Item:=”Name”&i,Key:=”Key#”&i)NextiMyNames.Add(Item:=”Thisisanewoneinserted”,before:=8)MyNames.Add(Item:=”这是新插入的一行”,after:=4)ForEachxInMyNamesDebug.WriteLine(“Line:”&y&“:”&x)y=y+1NextxEndSub上述程序用指名参数方式向集合中加入数据项。它首先用For…Next循环加入10个数据项,然后用Before和After参数把两个字符串插入已建立的集合中。运行程序如下图所示:用指名参数方式可以提高程序的可读性,并能减少错误。实际上,由于Before和After参数不能同时出现在一个Add方法中,VisualBasic.NET不允许按“位置”结合方式使用这两个参数,必须使用“指名”结合方式。参数Key是一个字符串表达式,在一个集合中,它必须是唯一的,否则在运行时将会产生错误。此外,当通过关键字访问集合中的一个成员时,所给出的关键字与集合中的关键字必须严格匹配(包括大小字)。2、集合成员的删除和检索(1)集合成员的删除集合成员通过Remove方法来删除,其格式如下:Object.RemoveIndex其中“Index”来指定想要删除的集合成员。它可以是数值(类似于传统数组中的下标)或数值表达式,也可以是集合成员的关键字,但不能是作为集合成员的实际字符串。例如,假定一个名为colWorkOrders的集合的第三个元素的关键字为“w017493”colWorkOrders.Remove3或colWorkOrders.Remove3在前面的例子中,为了删除集合中的第4个成员和第7个成员,可以在程序中增加下面两行语句(加在ForEach…Next循环前面):MyNames.Remove4MyNames.Remove“Key#7运行修改后的程序,输出结果如下:从图中可以看出,删除两个成员后,将自动调整各成员的索引值。用下面两种方法可以删除一个集合中的所有成员:Fori=1toMyNames.CountMyNames.Remove1Nexti或ForEachxInMyNamesMyNames.Remove1Nextx在上面的循环中,每次都删除集合中的第一个元素,当循环结束后,即可把集合中的元素全部删除。这是因为,集合中元素的索引号(即下标)为1到Count,删除第一个元素后,第二个元素自动变为第一个元素,后面元素的下标依次前移。这样,只要连续删除第一个元素,就能删除集合中的全部元素。(2)检索集合中指定的成员用Item方法可以指向(或返回)集合中某个具体的成员,其格式为:Object.ItemIndex和Remove方法一样,“Index”可以是成员在集合中的位置,也可以是成员的关键字。用下面的语句可以把集合中的第三个元素赋给一个变量。woCurrent=MyNames.Item(3)或woCurrent=MyNames.Item(“Key#3”Item方法是集合对象的默认方法,当访问一个集合的成员时可以将其省略。上面的两个语句可以改写为:woCurrent=MyNames(3)或woCurrent=MyNames(“Key#3”在下面的例子中,用Item方法指定集合中的元素,并分别把它们赋给不同的变量:PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.ClickDimiAsShortDimMyName1,MyName2,MyName3DimMyNamesAsNewCollection()Fori=1To10MyNames.Add(Item:="Name"&i,Key:="Key#"&i)NextiMyNames.Add(Item:="Name"&i,Key:="Key#"&i)MyNames.Add(Item:="Thisisanewoneinserted",Before:=8)MyNames.Add(Item:="这是新插入的一行",After:=4)Debug.WriteLine("")MyName1=MyNames.Item(5)MyName2=MyNames(8)MyName3=MyNames(9)Debug.WriteLine(MyName1)Debug.WriteLine(MyName2)Debug.WriteLine(MyName3)EndSub程序运行结果如下:用Item方法返回指定的集合成员。注意,当增加或删除集合成员时,集合对象自动地维护其索引号,集合中某个元素的索引号处于动态变化中。因此,不要试图通过保存一个索引值来对集合中相应的成员进行操作。如果想这样做,可以使用关键字,因为关键字是不会改变的。三、数据类型转换在实际应用中有时我们往往需要进行不同数据之间的操作运算,这时就必须转换数据类型。VB.NET提供了两种转换数据类型的方法:一是通过转换函数实现;二是通过对象化转换实现。<一>转换函数(1)数据类型转换函数表转换函数转换后的数据类型转换函数转换后的数据类型CBoolBooleanCIntIntegerCByteByteCLongLongCCharCharCObjObjectCDateDateCShortShortCDblDoubleCSngSingleCDecDecimalCStrString(2)数据类型转换方法用CStr函数将数据转换为字符串型StringDimintDataAsIntegerDimstrDatAsStringintData=8strDat=CStr(intData)<二>对象化转换方法VB.NET已经是完全对象化的语言了,声明时的变量、常量、数组,甚至一个数字都可看作一个对象。(1)数据类型对象化转换方法对象化转换方法转换后的数据类型对象化转换方法转换后的数据类型ToBooleanBooleanToInt32有符号32位整型ToByteByteToInt64有符号64位整型ToCharCharToSingleSingToDatatimeDateToStringStringToDoubleDoubleToUint16无符号16位整型ToInt16有符号16位整型ToUint32无符号32位整型(2)对象化转换方法用ToString方法将数据转换成String型。DimintDataAsIntegerDimstrDataAsStringintData=9strData=intData.ToString四、变量与常量<一>变量的命名规则(1)必须以字母开头,由字母、数字和下划线组成。(2)不得超255个字符。(3)不能是VB.NET中的关键字<二>变量的作用域与声明根据定义位置和使用的变量定义语句的不同,VisualBasic.NET中的变量可能分为4个级别,即代码块(Block)级变量、过程(Procedure)级变量、模块(Module)级变量及公用(Public)变量,各种变量位于不同的层次。1、代码块级变量代码块是一个程序段,它通常指的是一个控制结构,例如If…End…EndIf、For…Next等。例如,在窗体上画一个按钮,然后编写如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeSystem.EventArgs)HandlesButton1.ClickDimaAsShort=100‘过程级变量Ifa>=100thenDimbAsInteger‘代码块级变量B=a*aMsgbox(b)EndifMsgbox(b)‘此名将出错,回为b是代码块级变量,只在if…Endif之间有效。EndSub在上面的程序中,变量b是代码块级变量,它的作用域是If…EndIf之内,如果代码块外引用变量b,则会出错。代码块级变量通过Dim语句声明2、过程级变量在过程(事件过程或通过过程)内声明的变量称为过程级变量,也称局部变量,可以用Dim或Static声明,其作用域是它所在的过程。过程级变量通常用来存放中间结果或用作临时变量。某一过程的执行只对该过程内的变量产生作用,对其他的过程中相同名字的过程级变量没有任何影响。因此,在不同的过程中定义相同的过程级变量,它们之间没有任何关系。如果需要,则可以通过“过程名.变量名”的形式分别引用不同过程中相同名字的变量。局部变量在过程内用Dim、Static声明,例如:SubCommand1_Click()DimTempnumAsIntegerStaticTotalAsDouble……EndSub在上面的过程中,定义了两个过程级变量,即整型变量Tempnum和又精度静太变量Total。3、模块级变量前面我们曾多次提到“模块”。在VisualBasic.NET中,模块通常指的是一个类。窗体是一个类,可以称为窗体模块。为了方便起见,“模块极”对于模块、类的结构是等价的。在模块、类或结构中的过程和代码块之外声明的变量就是模块级变量。模块级变量可用于该模块内的所有过程。一个窗体模块可以含有若干个过程(事件过程或通过过程),这些过程连同窗体一起存入窗体文件(.vb)中。当同一个窗体内的不同过程使用相同的变量时,必须定义窗体层变量。在使用模块级变量前,必须声明,也就是说,模块级变量不能隐式声明。在默认情况下,模块级变量对模块中的所有过程都是可见的,模块级变量用Private或Dim声明。例如:PrivateintTempAsInteger或DimintTempAsInteger在声明模块级变量时,Private和Dim没有什么区别,但Private更好些,因为可以把它和声明公用变量的Public区别开来,使代码更容易理解。4、公用变量公用变量也称全局变量,其作用域最大,可以在项目的每个模块、每个过程中使用。公用变量在模块中声明使用的关键字是Public,不能用Dim语句声明,更不能用Private语句声明;同时,公用变量只能在模块的声明部分中声明,不能在过程中声明。模块通过“项目”菜单中的“添加模块”命令来建立。变量的作用域使用表名称作用域声明位置使用语句代码块级变量代码块代码块内Dim过程级变量过程过程中Dim或Static模块级变量模块内类或模块中所有过程之外Dim或Private公用变量项目内模块中所有过程之外Public<三>变量的命名约定为了提高程序代码的可读情和可持续发展性,一般建议使用以下的命名约定。1、根据不同的变量类型,系统有规定的后缀符号表示变量类型后缀例子Integer%Number%Long&ID&Decimal@Inmony@Double#Pai#Single!Color!String$Stuname$2、根据不同的变量类型,以前缀的方式变量进行命名变量类型前缀例子BooleanBlnBlnIscorrectByteBytCharChrChrSexDataDatDatLasDayDecimalDecDecCashDoubleDblDblpaiIntegerIntIntNumberLongLngLngIDObjectObjObjStudentShortShrShrColSingSngSngAreaStringStrStrName<四>常量在代码里,有时我们要反复使一个相同的常数值(如:Pi=3.1415926),这时我们可以先定义一个常量然后给它赋值,之后就调用这个常量就可以了。1、常量声明格式:Const数量名称As数据类型=数值如:ConstPiAsDouble=3.1415926和变量一样,Const语句声明也有其作用范围,跟变量一样使用相同的规则。2、常量分类常量有两种:一各是系统内部定义的常量;另一种是符号的或用户定义的常量。五、运算符与表达式<一>算术运算符运算符功能优先级^指数1-取负2*乘3/除(可以保留小数)\整除4Mod求余数5+加6-减<二>连接运算符运算符名称说明+加连接符如果两个操作数为“String”,就把两个操作数连接成一个字符串。否则按加号处理。&连接符将操作数强行转换成“String”,再进行连接运算。注意连接符“&”、“+”的区别:“+”连接符两边的操作数应均为字符串;若一边是数字型数据,则“+”运算符将另一边的字符串(该字符串必须是数字字符串,否则出错)强制转换成数字类型,然后进行自述加法运算。“&”在VB.NET中该运算符专门用于字符串连接,因此它会把其他的数据类型转换成字符串,再进行字符串的连接。例如:”abc”+520

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论