VB.Net 默认表单实例

VB.Net default form instance

我已经在我的项目中替换(正则表达式)对 default form instances 的所有访问,现在我想确保我不再使用默认实例。

默认实例似乎具有 can't be disabled(不更改 classes 的构造函数)

任何人都知道如何在 VB.Net 中找到默认表单实例的所有用法(或者 - 使用 class 名称访问非共享成员)

仅供参考:我正在使用 VS2017 和 ReSharper

没有无参数构造函数的表单没有默认实例,因此您可以在表单中添加带参数的构造函数作为临时措施。这会将您正在创建实例或使用默认实例的任何地方标记为错误,您可以确认它们都是前者而不是后者。一旦消除了对默认实例的所有使用,就可以删除临时构造函数,隐式无参数构造函数将自动恢复。

请注意,这假设您的表单还没有多个构造函数。如果是,那么您可以暂时将无参数的注释掉。

与流行的看法相反,在 WinForm 应用程序中生成 默认实例 并不是 Visual Basic 的强制性功能。

来自 Visual Basic 语言规范版本 11(添加了重点):

11.6.2 Default Instances In some situations, classes derived from a common base class usually or always have only a single instance. For example, most windows shown in a user interface only ever have one instance showing on the screen at any time. To simplify working with these types of classes, Visual Basic can automatically generate default instances of the classes that provide a single, easily referenced instance for each class.

问题是,据我所知,没有任何文档可以告诉您如何 enable/disable 创建它们。众所周知,此功能是 Application Framework 的一部分,可以在项目属性页面的 "Application Tab" 中 enabled/disabled。但是,禁用应用程序框架不会禁用默认实例生成。

如果在创建项目时 select 使用 "Windows Forms App" 模板,您 select 使用 "Empty Project" 模板并继续添加表单,您可以创建一个 WinForm "Enable application framework" 复选框 变灰 而 select 不可用的项目。您还会发现您不能使用默认表单实例。由此,您可以推断此功能可以通过“*.vbproj”文件进行配置。

控制项是<MyType>标签。此 属性 的可能值为:

  • 空 - 应用程序框架不可用
  • 控制台
  • Windows表单 - 已启用应用程序框架
  • WindowsFormsWithCustomSubMain - 应用程序框架已禁用
  • Windows - Class 图书馆
  • WebControl - 库

因此,如果您想将现有项目转换为不支持默认实例的项目,您可以编辑“*.vbproj”文件并将<MyType> 属性更改为.

请注意,这样做也会消除应用程序框架的其他功能,例如 My.ComputerMy.User,但您始终可以自己实现这些功能,如 How to: Use the My Namespace (C# Programming Guide) 中所述.