我已经替换了(正则表达式)我项目中default form instances的所有访问权限,现在我想确保我不再使用默认实例。
似乎默认实例功能can't be disabled(不更改类' ctor)
任何人都知道如何在VB.Net中找到默认表单实例的所有用法(或者 - 使用类名访问非共享成员)
仅供参考:我使用VS2017和ReSharper
答案 0 :(得分:2)
与流行的看法相反,WinForm应用程序中默认实例的生成不是Visual Basic的强制功能。
从Visual Basic语言规范版本11(重点添加):
11.6.2默认实例在某些情况下,从公共基类派生的类通常或者始终只有一个实例。对于 例如,用户界面中显示的大多数窗口只有一个 任何时候在屏幕上显示的实例。简化工作 这些类型的类, Visual Basic可以自动生成 容易提供单个类的默认实例 每个类的引用实例。
问题是我知道没有文档告诉你如何启用/禁用它们的创建。众所周知,此功能是 Application Framework 的一部分,可以在项目属性页的“应用程序选项卡”中启用/禁用。但是,禁用应用程序框架不会禁用默认实例生成。
如果在创建项目时选择“Windows Forms App”模板,则选择“空项目”模板并继续添加表单,您可以创建一个WinForm项目,其中“启用应用程序框架”复选框为< em>变灰且无法选择。您还会发现无法使用默认表单实例。由此,您可以推断出可以通过“* .vbproj”文件配置此功能。
控制项是 <MyType>
标记。此属性的可能值为:
因此,如果要将现有项目转换为不支持默认实例的项目,可以编辑“* .vbproj”文件并将<MyType>
属性更改为清空。
请注意,这样做还会消除应用程序框架的其他功能,例如My.Computer
和My.User
,但您可以自己实现这些功能,如How to: Use the My Namespace (C# Programming Guide)中所述。< / p>
答案 1 :(得分:1)
没有无参数构造函数的表单没有默认实例,因此您可以将带有参数的构造函数作为临时度量添加到表单中。这将标记您要么创建实例或使用默认实例作为错误的任何地方,您可以确认它们都是前者而不是后者。一旦消除了默认实例的所有用法,就可以删除临时构造函数,隐式无参数构造函数将自动恢复。
请注意,这假设您的表单还没有多个构造函数。如果确实如此,那么您可以暂时注释掉无参数的那个。