C#构造函数 - 为什么默认构造函数仅在没有构造函数时由编译器生成,而不是在没有默认构造函数时生成

Raj*_*jes 5 .net c# constructor

根据MSDN的构造函数设计指南,

"如果没有在类型上显式声明任何构造函数,许多语言(如C#)将自动添加公共默认构造函数.(抽象类获取受保护的构造函数.)将参数化构造函数添加到类中可防止编译器添加默认构造函数.这通常会导致意外的破坏性更改."

为什么不:

"如果你没有在类型上显式声明任何默认构造函数,那么许多语言(例如C#)将自动添加一个公共默认构造函数.(抽象类获得受保护的构造函数.)"

这背后的原因是什么?

ang*_*son 14

因为并非所有类都应构造为无参数.

考虑一个用于实现应用程序与磁盘上文件之间接口的类.必须处理构造对象的情况而不指定要管理的文件将是非常不方便的.

这样,由于创建非静态类的主要一点是,你要创建它的对象,你做足不必添加一个空参数的构造函数,如果这是你想拥有.

一旦你开始添加构造所有,那么AUTOMAGIC被禁用,将不会提供默认的构造函数.


Tre*_*ley 6

如果我定义一个自定义构造函数,这意味着我的对象需要以特定方式初始化,例如:

class Customer
{
    public Customer(string name) { this.Name = name; }
    public string Name { get; }
}
Run Code Online (Sandbox Code Playgroud)

如果编译器也添加了,public Customer()那么您可以绕过使用名称初始化客户的要求.