“DefInstance”是什么,我应该从WinForms应用程序中删除它吗?

3
我正在开发一个VB.NET WinForms应用程序,它是由Visual Studio升级而来(最初是1.0或1.1),从VB6代码升级而来(它本身又从VB5升级而来)。除了我接管维护此应用程序后创建的少数新表单外,应用程序中的所有表单都有一个名为DefInstance的方法,如果存在内存中的副本,则可以获取该表单的副本。我的问题是:何时需要引用不在工作范围内的内存中的表单对象?在我看来,这违反了所有良好编程原则,并且似乎会导致内存泄漏或更糟糕的情况。
问题:(1)这个DefInstance是VB6遗产的不幸残留物吗?(2)我应该着重删除应用程序中的DefInstance方法吗?
4个回答

2
我收到了一位微软员工的回答:

http://msdn.microsoft.com/en-us/library/aa289529(VS.71,printer).aspx

简而言之,DefInstance是一个“不是最佳实践”的兼容性方法,适用于尚未转换为真正的.NET WinForms应用程序的旧应用程序。直到今年早些时候我一直是Web程序员,从未使用过VB6“WinForms”应用程序,也没有处理升级向导在将它们强制转换为.NET时所做的兼容性妥协。

2
是的,缺省实例是通过升级向导导入应用程序时产生的可怕副产品。在点net版本之前,使用默认实例是VB的一种习惯,因为窗体作为默认实例总是驻留在内存中,尽管您也可以创建其他实例。
正如Parvenu74所说,这不是最佳实践。话虽如此,在从导入的应用程序中删除它时,由于可能正在使用它的副作用和引用,请非常小心。您最好不要在开发的新代码中使用它,并逐渐远离“转换”代码。如上所述,默认实例的内容在VB 2005中重新引入,但其使用是极不鼓励的。

1

1

可悲的是,那个有毒的语法糖被添加到了VB8(VS2005)中。现在,当VB.NET程序员无法理解每个线程都有一个单独的“Form1”实例时,他们会陷入致命的困惑。好消息是:现在你绝对不需要DefInstance了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接