辨析Visual Basic中的Empty、Null和Nothing关键字

环境

  • Microsoft Office 2000及以上版本的Microsoft Visual Basic for Applications

 

论述

Visual Basic for Application(以下简称“VBA”)语言是强类型语言,即定义时需要提供类型,可以是简单类型(如 Integer,Long,Single,Double,String,Boolean 或 Date 等)和复杂类型(如枚举或对象等)。如果在定义时没有提供类型则为 Variant 类型(表示该变量可以拥有上述任意类型的值)。Empty 和 Null 关键字用于 Variant 变量的赋值,Nothing 关键字用于对象变量的赋值。

  • Nothing 关键字用于对象变量,表示取消对象变量与对象实例的关联。 使用**Set** 语句可将 Nothing 分配给对象变量。 例如

Set objAny = Nothing

如果一个对象实例仅被赋予一个对象变量,则对象变量赋值Nothing后对象实例会被销毁(即对象实例所占内存会被释放)。

Dim objFile As clsFile

Set objFile = New clsFile    ' 创建对象实例,并赋予对象变量objFile

...

Set objFile = Nothing        ' 对象实例不再被引用会销毁

如果一个对象实例被赋予多个对象变量,则只有当所有对象变量被赋值Nothing后对象实例才会被销毁。

Dim objParent As clsParent
Dim objChild1 As clsChild
Dim objChild2 As clsChild

Set objParent = New clsParent

Set objChild1 = New clsChild
Set objChild1.Parent = objParent    ' objChild1和下面的objChild2的Parent指向了同一个objParent

Set objChild2 = New clsChild
Set objChild2.Parent = objParent    ' 至此对象实例objParent被引用了两次

...

Set objChild1.Parent = Nothing      ' objParent还被objChild2.Parent引用不会销毁
Set objChild2.Parent = Nothing      ' 至此objParent不再被引用会销毁

...

主动使用Nothing关键词取消对象变量对象实例的引用,从而可以尽早释放内存资源的占用!

  • Empty 关键字用于给 Variant 变量赋值。Empty实际是Variant变量定义后的默认值,表示变量尚未被初始化。此时使用函数 IsEmpty 检测结果为True。此时如果参加数值运算被当作0,如果参加字符串运算被当作空串(即""),如果参加布尔条件运算被当作 False。假设现有定义为 Variant 类型且未赋值的变量 v(在**立即窗口**中进行验证)
? IsEmpty(v)
True

? v + 3
3

? v & "abc"
abc

? Not v        ' 变量v参加布尔条件运算被当作False,取反操作后其值为-1(True的数值)
-1

  • Null 关键字用于给 Variant 变量赋值,表示变量不包含任何有效数据。此时使用函数 IsNull 检测结果为True。

 

参考

关键字 (Visual Basic for Applications)
https://docs.microsoft.com/zh-cn/office/vba/language/reference/keywords-visual-basic-for-applications

Nothing keyword
https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/nothing-keyword

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值