将New()入口点声明为私有会带来什么后果?

时间:2018-07-17 17:37:50

标签: vb.net winforms

我有一个基本的WinForm项目,其中启动表单声明为Public Sub New()。 ReSharper告诉我可以将New()构造函数设为私有。这样做的后果是什么?这会改变表单的加载方式吗?还是只是为了使表单不能从另一个项目创建?

我在获取有关将入口点设为私有的特定信息时遇到了麻烦。从逻辑上讲,我认为如果入口点是私有的,则该表单将永远不会加载,因为无法构造它。

2 个答案:

答案 0 :(得分:1)

在VB.NET中,如果您将构造函数明确声明为私有,则不能创建以下形式的实例:

Private Sub New()
    ' This call is required by the designer.
    InitializeComponent()
    ' Add any initialization after the InitializeComponent() call.
End Sub

但是,如果不为Sub New设置访问修饰符,它将是公开的:

Sub New()
    ' This call is required by the designer.
    InitializeComponent()
    ' Add any initialization after the InitializeComponent() call.
End Sub

答案 1 :(得分:1)

还有另外一个后果:您的表单将从My.Forms集合中消失,并且无法隐式创建/使用/打开此表单。如果您使用的是My.Forms(无需显式调用My.Forms。集合的事件),则必须自己创建自己的实例。

其他答案和评论中已经提到了其他后果:

  • 您无法从外部实例化此类,您将需要另一个带有参数或共享方法的构造函数来创建实例
  • 您不能继承此类并创建实例,继承的类必须使用参数调用其他构造函数(如果存在)。