3

尽管我主要是 C# 开发人员,但我正在为 VB.Net 应用程序提供支持。我遇到了我认为是“奇怪”的代码,因为我的 C# 思维模式告诉我代码是错误的,不应该编译,但它确实如此。我做了一个查找特定表单上的所有引用以查看它被使用的位置,并找到了对直接引用类的非分解方法而不实例化类的表单的引用。换句话说,我看到这样的代码:

FrmCareer.ShowDialog(careerId)
FrmCareer = Nothing

现在ShowDialog不是共享成员,它引用实例成员变量,所以我根本不希望智能感知列出ShowDialog方法。但它确实可以编译。谁能解释这里发生了什么?

4

2 回答 2

6

VB.NET 具有将所有表单的集合作为属性保存在My.Forms对象下的(非常好的)特性。当您第一次访问它们时,那​​里的对象会被实例化。通过这种方式,您可以获得可以引用的每个表单的默认实例。

在不太好的方面,VB 坚持全局My.Forms导入对象的属性,你无法改变它。

换句话说,应用程序中任何表单的类名都兼作该表单的全局实例。

于 2012-05-27T22:21:28.190 回答
1

FrmCareer表格的名字吗?如果是这样,我认为对于您可以像这样访问的每种表单都有一种神奇的“单例”式变量。这个想法是开发人员可能只想要一个FrmCareer,因此任何代码都可以像这样访问它(在这种情况下显示表单)。在 C# 术语中,它就像一个全局静态变量。

啊,是的,看到这个问题- 它有一个更好的解释。

于 2012-05-27T22:14:50.330 回答