Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-模块/函数/VBA

vb中set和new的使用方法

时 间:2016-08-16 09:53:23
作 者:杨雪   ID:42182  城市:南京
摘 要:介绍一下什么是值类型,什么是引用类型,以及俩者是怎么定义的?
正 文:

对象分为值类型和引用类型

所有的结构体都是值类型,所有的类对象都是引用类型

 

值类型在创建时不需要使用new来实例化,但引用类型需要使用new实例化

值类型包括大部分的数值对象,比如byte\int\long\datetime等这些类型,这些是不需要用new来声明的,比如

dim a as int32 = 5 

dim b as long = ....

 

引用类型包括其他大部分的类型对象,比如数组、窗体对象、各种类型库对象都是。如果不用new声明,就会发生对象为空的错误

dim bs as byte() = new byte() {1,2,3,4,5}

dim f1 as form = new form ; dim f2 as new form

dim sb as new system.text.stringbuilder

 

一个特例:string是引用类型,但它不需要使用new来声明

dim s as string = "..."

 

Dim 语句

声明变量并分配存储空间。

 

语法

Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . .

Dim 语句的语法包含下面部分:

部分

描述

WithEvents

可选的。关键字,说明 varname 是一个用来响应由 ActiveX对象触发的事件的对象变量。只有在类模块中才是合法的。使用 WithEvents,可以声明任意个所需的单变量,但不能使用 WithEvents 创建数组New WithEvents 不能一起使用。

varname

必需的。变量的名称;遵循标准的变量命名约定。

subscripts

可选的。数组变量的维数;最多可以定义 60 维的多维数组。subscripts 参数使用下面的语法:

 

[lower To] upper [, [lower To] upper] . . .

 

如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有使用 Option Base 语句,则下界为 0

New

可选的。可隐式地创建对象的关键字。如果使用 New 来声明对象变量,则在第一次引用该变量时将新建该对象的实例,因此不必使用 Set 语句来给该对象引用赋值。New 关键字不能声明任何内部数据类型的变量,以及从属对象的实例,也不能与 WithEvents 一起使用。

type

可选的。变量的数据类型;可以是 ByteBooleanIntegerLongCurrencySingleDoubleDecimal(目前尚不支持)、DateString(对变长的字符串)、String * length (对定长的字符串)、ObjectVariant用户定义类型、或对象类型。所声明的每个变量都要一个单独的 As type 子句。

说明

模块级别中用 Dim 声明的变量,对该模块中的所有过程都是可用的。在过程级别中声明的变量,只在过程内是可用的。

可以使用 Dim 语句在模块级或过程级中声明变量的数据类型。例如,下面的语句声明了 Integer 类型的变量。

Dim NumberOfEmployees As Integer

也可以使用 Dim 语句来声明变量的对象类型。下面的语句为工作表的新建实例声明了一个变量。

Dim X As New Worksheet

如果定义对象变量时没有使用 New 关键字,则在使用该变量之前,必须使用 Set 语句将该引用对象的变量赋值为一个已有对象。在该变量被赋值之前,所声明的对象变量有一个特定值 Nothing,这个值表示该变量没有指向任一个对象实例。

也可以使用带空圆括号的 Dim 语句来定义动态数组。在定义动态数组后,可以在过程内使用 ReDim 语句来定义该数组的维数和元素。如果试图在 PrivatePublic Dim 语句中重新定义一个已显式定义了大小的数组的维数时,就会发生错误。

如果不指定数据类型或对象类型,且在模块中没有 Deftype 语句,则该变量按缺省设置是 Variant 类型。

当初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。

注意 当在过程中使用 Dim 语句时,通常将 Dim 语句放在过程的开始处。

 

Set 语句

将对象引用赋给变量属性

语法

Set objectvar = {[New] objectexpression | Nothing}

Set 语句的语法包含下面部分:

部分

描述

objectvar

必需的。变量或属性的名称,遵循标准变量命名约定。

New

可选的。通常在声明时使用 New,以便可以隐式创建对象。如果 New Set 一起使用,则将创建该的一个新实例。如果 objectvar 包含了一个对象引用,则在赋新值时释放该引用。不能使用 New 关键字来创建任何内部数据类型的新实例,也不能创建从属对象。

objectexpression

必需的。由对象名,所声明的相同对象类型的其它变量,或者返回相同对象类型的函数或方法所组成的表达式

Nothing

可选的。断绝 objectvar 与任何指定对象的关联。若没有其它变量指向 objectvar 原来所引用的对象,将其赋为 Nothing 会释放该对象所关联的所有系统及内存资源。

说明

为确保合法,objectvar 必须是与所赋对象相一致的对象类型。

Dim、Private、Public、ReDim以及 Static 语句都只声明了引用对象的变量。在用 Set 语句将变量赋为特定对象之前,该变量并没有引用任何实际的对象。

下面的示例说明了如何使用 Dim 来声明 Form1 类型的数组。Form1 实际上还没有实例。然后使用 Set 将新创建的 Form1 的实例的引用赋给 myChildForms 变量。在 MDI 应用程序中可以使用这些代码来创建子窗体。

Dim myChildForms(1 to 4) As Form1
Set myChildForms(1) = New Form1
Set myChildForms(2) = New Form1
Set myChildForms(3) = New Form1
Set myChildForms(4) = New Form1

通常,当使用 Set 将一个对象引用赋给变量时,并不是为该变量创建该对象的一份副本,而是创建该对象的一个引用。可以有多个对象变量引用同一个对象。因为这些变量只是该对象的引用,而不是对象的副本,因此对该对象的任何改动都会反应到所有引用该对象的变量。不过,如果在 Set 语句中使用 New 关键字,那么实际上就会新建一个该对象的实例。



Access软件网官方交流QQ群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助