【发布时间】:2011-11-13 20:58:53
【问题描述】:
我最近不得不深入研究一些 VB6 代码,并且到处都看到了这种模式:
dim o as obj
set o = new obj
为什么不这样?
dim o as new obj
我记得 15 年前有一个很好的理由,但我不记得现在是什么了。有人记得吗?理由还成立吗?
【问题讨论】:
-
嗯,有趣,我在 VB6 中编码了 3 年,我记得这两者是完全正确的。
-
dim o as new obj在第一次访问时被实例化,而不是之前。因此,对其进行的每个属性/方法调用都会产生检查Nothing变量的开销。 -
@wqw 每个属性都有检查 Nothing 的开销,即使在对象被实例化后或只是第一次实例化之后?
-
@AngryHacker 是的,因为除非对象是“Not Nothing”,否则您根本无法访问对象的属性。所以每个访问前面都有一个隐含的“If obj Is Nothing Then Set obj = New MyObj”。
-
@wqw 不要忘记,一旦在循环中使用,“New obj”方法将不会破坏和重新创建 obj,但是如果您执行“Dim o As obj”和“Set o = New obj”,那么每次运行这个序列时,它都会销毁并重新创建“o”变量。特别是如果 obj 是 Collection 类型,并且它没有被销毁和重新创建(就像只执行“Dim o As New Collection”时那样),每次您将项目添加到 Collection 时(在这种情况下为“o”,当一个循环)它只会继续将项目重新添加到集合中,并且您将获得前一个循环中的陈旧数据,差别很大。看我的回答。
标签: vb6