我在VB.Net应用程序上做支持,尽管我主要是C#开发人员。我遇到了我认为是“奇怪的”代码,因为我的C#思维模式告诉我代码是错误的,不应该编译,但确实如此。我在特定表单上执行了查找所有引用以查看它的使用位置,并找到了对表的非引导方法的引用,而没有实例化类。换句话说,我看到这样的代码:
FrmCareer.ShowDialog(careerId)
FrmCareer = Nothing
现在 ShowDialog 不是一个共享成员,它引用实例成员变量,所以我不希望intellisense列出 ShowDialog 方法一点都不但它确实并且它编译。谁能解释一下这里发生了什么?
答案 0 :(得分:5)
VB.NET具有(非常好的)功能,可以将所有表单的集合保存为My.Forms
对象下的属性。首次访问时,会对实例进行实例化。通过这种方式,您可以获得每个表单的默认实例。
在不那么好的一面,VB坚持全局导入My.Forms
对象的属性 ,你无法改变它。
换句话说,应用程序中任何表单的类名称都可以作为该表单的全局实例。
答案 1 :(得分:1)
FrmCareer
是表单的名称吗?如果是这样,我认为对于你可以像这样访问的每个表单,都有一个神奇的“单例”变量。想法是开发人员可能只需要一个FrmCareer
,因此任何代码都可以像这样访问它(在这种情况下显示表单)。在C#术语中,它就像一个全局静态。
啊,是的,请参阅this question - 它有更好的解释。