将New()入口点声明为私有的结果是什么



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

我很难获得关于将入口点设为私有的具体信息。从逻辑上讲,我认为如果入口点是私有的,那么表单就永远不会加载,因为没有办法构建它

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

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

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

在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

最新更新