Class 似乎在没有实例的情况下使用。有可能的? VB.net

Class appears to be used without an instance. It is possible? VB.net

简短版本:正在使用 class,但没有实例化其类型的变量。怎么样?

我有一个巨大的遗留程序,它是从 VB6 转换为 VB.net。 它正在编译并且许多方面都可以工作,但是存在与 MDI(Multiple-Document 界面)显示相关的问题。我在parent MDI 窗体下放置了其他测试窗体,它们显示正确。有问题的表格不显示。 (而且,当然,它是最重要的,也是最复杂的形式。我希望我可以 re-write 它,但是 没有 的可能性。)

有一个 class,MDI1,它在代码中被许多其他 classes 使用超过 7,000 次。 MDI1 class 以不显示的形式广泛使用。无论在哪里使用 MDI1,它总是简称为 MDI1 或 Namespace.MDI1 。据我所知,它从未实例化为 object。就好像它是一个单例,不知何故,但我看不出它是一个。

class 的 header 如下:

Option Strict Off
Option Explicit On
Imports VB = Microsoft.VisualBasic
Friend Class MDI1
  Inherits System.Windows.Forms.Form
  Dim MDI_Activated As Boolean

  Public Sub New()
    MyBase.New()
    InitializeComponent_Renamed()
  End Sub
  ...

谁能告诉我这是怎么回事?

我尝试通过右键单击并选择 "go to definition" 来检查 Visual Studio 的每个使用它的地方,都会让我直接回到 class 定义(第 4 行上面的代码),并且永远不会是类型的变量 MDI1。我已经搜索了整个源代码(在 Visual Studio 之外同时使用了 Visual Studio 和 grepwin),但没有找到使用 MDI1 类型实例化的变量。

如果没有那种类型的变量,我不明白对 class 的调用是如何工作的。

将不胜感激。

我正在使用 Visual Studio 2010 Professional,这是我可以访问的最新版本。

我假设您不知道 VB.NET 中的 Default Form Instance,因此感到惊讶。这是一个常见问题,因为 C# 中缺少此问题。

对于VB.NET中的winforms应用程序,每个窗体都有一个默认实例,可以简单地通过其窗体名称(class名称)来引用。您当然可以像创建任何其他实例一样创建自己的实例 class 并选择不使用默认实例。

此功能对于已从 VB6 迁移到 VB.NET 的遗留应用程序特别有用,因为默认表单实例在 VB6 中是一种规范。

您可以在此处阅读有关 Default Form Instances 的更多信息:

https://msdn.microsoft.com/en-us/library/ms233839.aspx

https://msdn.microsoft.com/en-us/library/aa289529(v=vs.71).aspx