《枚举与用户定义类型》由会员分享,可在线阅读,更多相关《枚举与用户定义类型(14页珍藏版)》请在金锄头文库上搜索。
1、第十章第十章 枚举与用户定义类型枚举与用户定义类型-the type of enumerate and self-define u前面我们讲述了Visual Basic的基本数据类型基本数据类型,包括整型数、单精度数、浮点数等。但是在程序设计中有些数据无法直接用基本数据类型来表示比如:一个学生的档案既有姓名、性别等字符串型一个学生的档案既有姓名、性别等字符串型的量,又有成绩等的单精度型的量的量,又有成绩等的单精度型的量,这时可以将将不同的基本类型数据组合成一个有机的整体不同的基本类型数据组合成一个有机的整体,便于一起引用。用户定义类型可以满足这种要求。同时,一个变量的取值有时需要限定在某一个指
2、一个变量的取值有时需要限定在某一个指定的范围内定的范围内,这可以通过枚举类型实现。110.1 枚举类型枚举类型-enumerate typeu当一个变量有几种可能的取值时,可以将它定义为枚举类型。u定义:定义:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.u一、定义枚举类型:一、定义枚举类型:u枚举类型放在窗体模块、标准模块或共用模块中的声明部分,通过enum语句来定义。u1.格式:public|private enum nameu membername=constantexpressionu membername=constantexpressionu .u End enum
3、2u说明说明:public:表示该枚举类型在整个工程中都是可见的(缺省的)uprivate:表示枚举类型只在所生命的模块中是可见的。Name: 枚举类型的名称。必须是一个合法的VB标识符,在定义该枚举类型的变量或参数时用该名称来指定类型.uMembername:指定该枚举类型的组成元素名称.uConstantexpression:枚举类型的组成元素的值.如果没有指定具体值,则所有赋的值或者是0或者比其直接前驱的值大1.元素的值也可以是别的enum类型.VB中将枚举中的元素的值按长整数处理.如果将一个浮点数值赋给一个枚举中的元素,VB会将该值取整为最接近的长整数.10.1 枚举类型枚举类型-en
4、umerate type3u二二.枚举变量声明与赋值枚举变量声明与赋值:u定义枚举类型后,可以声明该枚举类型的变量,然后使用该变量存储枚举元素的数值.u枚举变量枚举变量:指用枚举类型定义的变量.变量和参数都可以定义为枚举类型.过程的返回值也可以是枚举类型.u格式:格式: dim 枚举变量名 as 枚举类型名u注意注意:尽管通常只将枚举元素数值赋给枚举类型的变量,但也可以将任何长整数数值赋给该变量.当对与枚举常数不相关的变量赋值时,Vb 不会产生错误.u枚举语句只能在模块级别中出现,不能用模块名来限定枚举类型. 10.1 枚举类型枚举类型-enumerate type4u使用举例使用举例:u例如
5、:p199 利用枚举类型输出是否工作日.使用workdays类型的变量存储与workdays枚举中的元素相关联的整数数值.10.1 枚举类型枚举类型-enumerate type510.2 用户定义类型用户定义类型-self-define typeu在Vb中可以用系统提供的标准类型定义变量,它们都是计算机处理的基本数据项.但在实际工作中,常见的并不是孤立的数据项,而是由两个或两个以上的基本项组成的组合项.用这些组合项来描述相应对象的若干属性,这些描述相同对象的组合项的集合形成了记录.u记录定义:通常由描述某实体对象各属性数据的若干字段(数据项)构成.记录与数组最大的不同就是数组中的每一元素必须
6、具有相同的数据类型,而记录中的每一个数据项目却可以具有不同的数据类型.u一一.创建用户定义类型创建用户定义类型:u使用type语句可以创建用户定义的类型,该语句必须置于该语句必须置于该语句必须置于该语句必须置于模块的声明部分模块的声明部分模块的声明部分模块的声明部分. .6格式格式:private|publictype varname elementname (subscripts) as type elementname(subscripts) as type end typeu说明说明:public|private: typename:uelementname: type: usubscr
7、ipts:数组元素的维数.当定义大小可变的数组时,只须圆括号.subscripts参数使用如下语法:u格式格式:lower to upper ,lower toupper.u说明说明:如果不显示指定lower,则数组的下界由option base语句控制.如果没有option base语句则下界为0.10.2 用户定义类型用户定义类型-self-define type7uType语句只能在模块级使用。在标准模块中,用户自定义类型按缺省设置是共用的。可以使用private关键字来改变其可见性。而在类模块中,用户自定义类型只能是私有的,且使用public关键字也不能改变其可见性。u注意注意:(1)
8、在typeend type块中不允许使用行号和行标号。u(2)用户定义类型也可以包含对象。uEg: private type accountpacku frminput as formu dbpayrollaccount as databaseu end type10.2 用户定义类型用户定义类型-self-define type810.2 用户定义类型用户定义类型-self-define typeu(3)用户定义类型还可以包含其他的用户定义类型。u(4)为了保证代码的可读性和易于调试,应尽量将定义用户定义数据类型的所有代码限制在一个模块模块模块模块的范围内。u二二.用户定义类型变量用户定义类
9、型变量u使用type语句创建一个用户定义类型后,可以定义该类型的变量。定义变量可使用的保留字有dim,private,public,redim或static。910.2 用户定义类型用户定义类型-self-define typeu注意:假如声明了使用dim关键字,标准或类模块中的用户自定义类型将缺省为公用的。u使用用户定义类型解决问题:程序举例:u三三.用户定义类型与数组:用户定义类型与数组:u1.包含数组的用户定义类型u用户定义类型可以包含一个固定数组,也可以包含动态数组。当在用户定义类型中声明大小固定的数组时必须用数字文字或常数而不能用变量来声明数组的维数。Eg:p197u2.用户定义类型
10、数组u如果一个数组中元素的数据类型是用户定义类型,则称为用户定义类型数组或记录数组。1010.2 用户定义类型用户定义类型-self-define typeu四四.用户定义类型与过程用户定义类型与过程u可以从函数中返回用户定义类型,也可以将属于用户定义类型的变量作为参数传递到过程中。uEg: sub fillsystem(some system as systeminfo)u somesystem.cpu=lstcpu.textu somesystem.memory=txtmemory.textu somesystem.cost=txtcost.textu somesystem.purchas
11、edate=nowu end subu如果要传递窗体或类模块中的用户定义类型,则过程必须是私有的。1110.2 用户定义类型用户定义类型-self-define typeu五五.with语句语句u如果程序中要求对用户定义类型元素进行频繁操作,可以使用with语句简化用户定义类型元素的访问。u格式:with u u end withu说明:(1)对象名-可以是用户定义类型变量名或一个VB对象名。(2)用with语句打开一个对象之后,在with控制结构引用记录元素、对象属性时不需要指出记录变量或对象的名称。(3)要改变一个对象的多个属性,可以使用with语句来给同一个对象的几个属性赋值。1210.
12、2 用户定义类型用户定义类型-self-define typeu(4)程序一旦进入with结构,对象就不能改变,因此不能用一个with语句来设置多个不同的对象。可以将一个with结构放在另一个之中,而产生嵌套的嵌套的嵌套的嵌套的withwith语句语句语句语句。但由于外层外层外层外层withwith结构成员会在内层的结构成员会在内层的结构成员会在内层的结构成员会在内层的withwith结构中被屏蔽结构中被屏蔽结构中被屏蔽结构中被屏蔽,所以必须在内层的必须在内层的必须在内层的必须在内层的withwith结构中,使用完整的对象引用来结构中,使用完整的对象引用来结构中,使用完整的对象引用来结构中,使
13、用完整的对象引用来指出在外层指出在外层指出在外层指出在外层withwith结构中的对象成员结构中的对象成员结构中的对象成员结构中的对象成员。因此,VB的嵌套with语句并不能有效的处理嵌套的记录变量。u(5)不要用转向语句跳入或跳出with结构。如果with结构中的语句被执行,而with或end with语句并没有执行,则会产生错误或不可预知的结果。u应用举例:p201 10-6;p202 10-713本章总结本章总结u1、枚举类型的定义格式u 枚举类型放在窗体模块、标准模块或共用模块中的声明部分,通过enum语句来定义。u2、枚举类型变量的定义格式u3、记录类型的定义格式 u4、记录类型变量的定义格式 u5、记录类型的使用 u .记录类型数组u .记录类型的参数14