VB.Net 默认表单实例



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

似乎无法禁用默认实例功能(在不更改类的 ctor 的情况下)

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

仅供参考:我正在使用带有ReSharper的VS2017

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

从 Visual Basic 语言规范版本 11 (着重号添加):

11.6.2 默认实例 在某些情况下,从公共基类派生的类通常或总是只有一个实例。为 例如,用户界面中显示的大多数窗口只有一个 实例随时显示在屏幕上。简化使用 这些类型的类,Visual Basic 可以自动生成类的默认实例,这些实例提供单个、轻松地 每个类的引用实例。

问题是我知道没有文档告诉您如何启用/禁用它们的创建。众所周知,此功能是应用程序框架的一部分,可以在项目属性页的">应用程序选项卡"中启用/禁用。 但是,禁用应用程序框架不会禁用默认实例生成。

如果在创建项目时选择"Windows 窗体应用"模板,而是选择"空项目"模板并继续添加窗体,则可以创建一个 WinForm 项目,其中"启用应用程序框架"复选框灰且不可选择。 您还会发现不能使用默认表单实例。 由此,您可以推断出可以通过"*.vbproj"文件配置此功能。

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

  • 空 - 应用程序框架不可用
  • 安慰
  • WindowsForms - 启用应用程序框架
  • WindowsFormsWithCustomSubMain - 应用程序框架已禁用
  • 窗口 - 类库
  • 网站控制 - 库

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

请注意,这样做也会消除应用程序框架的其他功能,如My.ComputerMy.User,但您始终可以自己实现这些功能,如如何:使用 My Namespace(C# 编程指南)中所述。

没有无参数构造函数的窗体没有默认实例,因此可以将带有参数的构造函数作为临时度量值添加到窗体中。这会将您创建实例或使用默认实例的任何地方标记为错误,您可以确认它们都是前者而不是后者。消除默认实例的所有使用后,可以删除临时构造函数,隐式无参数构造函数将自动还原。

请注意,这假定窗体尚未具有多个构造函数。如果是这样,那么您可以简单地暂时注释掉无参数的。

最新更新