有趣的结果在新的和没有

时间:2016-05-20 04:10:30

标签: vb6

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

Dim anObject As New AClass
Set anObject = Nothing

anObject.DoingSomeThing

我期望,代码应该失败,因为anObject现在设置为Nothing,但代码可以正常工作吗?

如果我将上述代码更改为

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

anObject.DoingSomeThing

这将失败,因为anObject现在没什么。

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

1 个答案:

答案 0 :(得分:5)

在VB6中,如果声明某个对象If anObject Is Nothing Then Set anObject = New AClass ,那么VB会在内部放置隐藏代码来检查对象的存在,并可选择在每次使用该对象之前实例化对象。显然这样的代码看起来像:

As New

在第二种情况下,你必须自己保持对象存在。

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