Vb6 有趣的结果是新的,什么都没有

Vb6 有趣的结果是新的,什么都没有,vb6,Vb6,我正在使用VB6,刚刚在我的团队成员的代码中发现了一些有趣的东西 Dim anObject As New AClass Set anObject = Nothing anObject.DoingSomeThing 我所期望的是,代码应该会失败,因为一个对象现在设置为Nothing,但是代码可以正常工作吗 如果我将上述代码更改为 Dim anObject As AClass Set anObject = New AClass Set anObject = Nothing anObject.D

我正在使用VB6,刚刚在我的团队成员的代码中发现了一些有趣的东西

Dim anObject As New AClass
Set anObject = Nothing

anObject.DoingSomeThing
我所期望的是,代码应该会失败,因为一个对象现在设置为Nothing,但是代码可以正常工作吗

如果我将上述代码更改为

Dim anObject As AClass
Set anObject = New AClass
Set anObject = Nothing

anObject.DoingSomeThing
这将失败,因为一个对象现在什么都不是


我无法理解为什么代码可以在第一个代码中工作,但在第二个代码中失败?

在VB6中,如果您将某个对象
声明为新的
,则VB会在内部放置隐藏代码以检查对象是否存在,并在每次使用该对象之前可选地实例化对象。明确地说,此类代码如下所示:

If anObject Is Nothing Then Set anObject = New AClass
在第二种情况下,您必须自己保持对象的存在

注意-最好不要作为新的使用。它的性能更差,如果您需要将项目移植到VB.NET,则行为会发生变化;在VB.NET中,将变量
声明为新的
只是首先初始化它,但在将其设置为
后不会重新初始化它