C# 中的隐式构造函数有什么作用?

Shu*_*ury 2 c# constructor

如果我们没有声明构造函数,编译器会为我们创建一个构造函数 -隐式构造函数

它的具体作用是什么?我一直认为隐式构造函数将实例的成员初始化为一些默认值(例如stringsto nullintegersto 0booleansto false

但根据文档

字段在调用对象实例的构造函数之前立即初始化。如果构造函数分配字段的值,它将覆盖字段声明期间给出的任何值。

那么,隐式构造函数的目的到底是什么?只是一个促进实例创建的幕后机制?

Hei*_*nzi 5

\n

那么,隐式构造函数的目的到底是什么?只是一个促进实例创建的幕后机制?

\n
\n

是的。它的(唯一)目的是允许您编写而var x = new MyObject()不必创建空的 public\xc2\xb9 构造函数public MyObject() : base() { }

\n

“隐式构造函数”的正式名称是default instance constructor,它在 C# 规范的第 14.11.5 节中有详细描述:

\n\n
\n

\xc2\xb9 默认构造函数的可见性为public,除非类为abstract,在这种情况下默认构造函数为protected

\n

  • 如果该类型在任何非静态成员上有任何初始值设定项,则还必须将(编译器生成的)代码插入到每个构造函数中,其中包括 (3认同)
  • 这只是证明用户编写的代码在编译器生成代码之后执行。如果您查看 IL,会发现有一个构造函数方法首先将 1 分配给示例中的该字段。 (3认同)