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

Mar*_*k T 2 vb.net singleton instantiation

简短版本:正在使用一个类而没有实例化它的类型的变量.怎么样?

我有一个巨大的遗留程序,从VB6转换为VB.net.它正在编译并且许多方面都有效,但是存在与MDI(多文档界面)显示相关的问题.我已将其他测试表单放在父MDI表单下,并且它们正确显示.有问题的表格不会显示.(而且,当然,它是最重要的,也是最复杂的形式.我希望我可以重写它,但是没有可能.)

有一个类MDI1,在许多其他类的代码中使用了7000多次.MDI1类以不显示的形式广泛使用.无论在何处使用MDI1,它总是简称为MDI1或Namespace.MDI1.据我所知,它永远不会被实例化为一个对象.就好像它是一个单身人士,不知何故,但我看不出任何东西使它成为一个.

该类的标题如下:

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
  ...
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里会发生什么?

我尝试通过右键单击并选择"转到定义"来检查Visual Studio的每个地方都会带我回到类定义(上面代码的第4行),而不是类型的变量MDI1.我搜索了整个源代码(使用Visual Studio和Visual Studio外部的grepwin),并且找不到使用MDI1类型实例化的变量.

我不明白对类的调用是如何工作的,没有该类型的变量.

非常感谢帮助.

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

Pra*_*mar 5

我假设你Default Form Instance在VB.NET 中并不知道,因此出乎意料.这是一个常见问题,因为C#中缺少这个问题.

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

此功能对于已从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