为什么MessageBox类在C#中没有默认构造函数?

Jav*_*ram 6 .net c# constructor

情况1:

我正在尝试这个

MessageBox m = new MessageBox();
Run Code Online (Sandbox Code Playgroud)

并得到编译错误

'System.Windows.Forms.MessageBox'没有定义构造函数

案例2:
然后,我创建了一个没有构造函数的类

class myClass
{

}
Run Code Online (Sandbox Code Playgroud)

并尝试myClass my = new myClass(); 这次我没有发现错误.

现在,我的问题:

  • 为什么我在第一种情况下出错?

因为,两个都是类,每个类都有默认构造函数

  • 第一种情况下默认构造函数在哪里?

ata*_*man 15

构造函数可以是private或者protected为了禁止直接实例化.请改用静态工厂方法.有一个静态方法ShowMessageBox类.

Archil也是对的.如果定义了显式构造函数,则不再创建隐式默认构造函数.

关于x0ns注释:是的,实例化静态类也是不可能的.不要使用静态类,这是糟糕的设计(有例外).


arc*_*hil 5

在c#中,如果定义了NONE,则evey类自动具有默认构造函数.MessageBox定义了其他构造函数,因此它不会自动拥有默认构造函数

  • 据Reflector说,它确实有一个构造函数.但构造函数未标记为"public". (4认同)
  • 这不一样.非公共构造函数和非标准构造函数之间存在差异,这些构造函数仍然可以调用. (2认同)