VB.Net默认表单实例

时间:2018-04-20 19:08:03

标签: vb.net visual-studio resharper

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

似乎默认实例功能can't be disabled(不更改类' ctor)

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

仅供参考:我使用VS2017和ReSharper

2 个答案:

答案 0 :(得分:2)

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

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

  

11.6.2默认实例在某些情况下,从公共基类派生的类通常或者始终只有一个实例。对于   例如,用户界面中显示的大多数窗口只有一个   任何时候在屏幕上显示的实例。简化工作   这些类型的类, Visual Basic可以自动生成   容易提供单个类的默认实例   每个类的引用实例。

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

如果在创建项目时选择“Windows Forms App”模板,则选择“空项目”模板并继续添加表单,您可以创建一个WinForm项目,其中“启用应用程序框架”复选框为< em>变灰且无法选择。您还会发现无法使用默认表单实例。由此,您可以推断出可以通过“* .vbproj”文件配置此功能。

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

  • 空 - 应用程序框架不可用
  • 控制台
  • WindowsForms - 启用应用程序框架
  • WindowsFormsWithCustomSubMain - 禁用应用程序框架
  • Windows - 类库
  • WebControl - library

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

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

答案 1 :(得分:1)

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

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