我正在使用VB6,并且在我的团队成员的代码中发现了一些有趣的东西.
Dim anObject As New AClass
Set anObject = Nothing
anObject.DoingSomeThing
Run Code Online (Sandbox Code Playgroud)
我期望,代码应该失败,因为anObject现在设置为Nothing,但代码可以正常工作吗?
如果我将上述代码更改为
Dim anObject As AClass
Set anObject = New AClass
Set anObject = Nothing
anObject.DoingSomeThing
Run Code Online (Sandbox Code Playgroud)
这将失败,因为anObject现在是Nothing.
我无法理解为什么代码可以在第一个代码中工作但在第二个代码中失败?
在VB6中,如果声明了某个对象As New,那么VB会在内部放置隐藏代码来检查对象的存在,并可选择在每次使用该对象之前实例化对象.显然这样的代码看起来像:
If anObject Is Nothing Then Set anObject = New AClass
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,您必须自己维护对象存在.
注意 - 最好不要使用As New.它的性能更差,如果您需要将项目移植到VB.NET,那么行为会发生变化; 在VB.NET中声明变量As New只是初始化它,但在设置之后不会重新初始化它Nothing.