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

时间:2015-08-05 05:30:59

标签: 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
  ...

有人能告诉我这里会发生什么吗?

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

我不理解这个类的调用是如何工作的,没有这种类型的变量。

非常感谢帮助。

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

1 个答案:

答案 0 :(得分:5)

我假设您不了解VB.NET中的Default Form Instance,因此出人意料。这是一个常见问题,因为在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