VB.Net形成非共享方法,就好像它们被共享一样?

Bru*_*ill 3 vb.net winforms

我在VB.Net应用程序上做支持,虽然我主要是C#开发人员.我遇到了我认为是"奇怪的"代码,因为我的C#思维模式告诉我代码是错误的,不应该编译,但确实如此.我在特定表单上查找所有引用以查看它的使用位置,并找到对表单的引用的引用,其中直接引用类的非碎片方法而不对类进行实例化.换句话说,我看到这样的代码:

FrmCareer.ShowDialog(careerId)
FrmCareer = Nothing
Run Code Online (Sandbox Code Playgroud)

现在的ShowDialog共享的成员,它引用实例成员变量,所以我不希望智能感知列出的ShowDialog方法在所有.但它确实并且它编译.谁能解释一下这里发生了什么?

Kon*_*lph 5

VB.NET具有(非常好的)功能,即将所有表单的集合保存为My.Forms对象下的属性.首次访问时,会对实例进行实例化.通过这种方式,您可以获得可以引用的每个表单的默认实例.

在不太好的一面,VB坚持全局导入My.Forms对象的属性,你无法做任何改变.

换句话说,应用程序中任何表单的类名称都可以作为该表单的全局实例.

  • @BruceHill啊不,我忘了提这个.每次尝试访问表单时,表单都会自动重新实例化.将它们设置为"Nothing"有点奇怪,但*应该*工作.这回顾了VB6是如何做到的 - 第一个VB.NET版本没有这个功能,VB6开发人员吵着把它包括在内.我不会评论我对一般设计的看法,只是说你不应该在药物的影响下设计框架...... (3认同)