c# - 空构造函数在 C# 中提供了哪些好处?

标签 c# constructor default-constructor

我来到了C#中的现有项目。我可以看到有几个类具有空的无参数构造函数。要么是公共(public)的,要么是内部的。这些类本身也是公共(public)的或内部的。我在那里既看不到其他构造函数,也看不到继承。我想知道这有什么好处。

我预计如果绝对没有构造函数,那么 C# 编译器总是会创建一个无参数的空构造函数。所以我的问题是:当前代码(在上述条件下)是否与没有构造函数时有任何不同?我认为唯一的特例是公共(public)类中的内部构造函数。我还错过了什么吗?

最佳答案

好吧,“或内部的”是一个重大的变化;默认构造函数将是公共(public)的。

但是,通常我看到这种情况的原因是,如果有人稍后添加了一个特定的构造函数,它并不代表一个破坏性的变化。构造函数的不寻常之处在于添加自定义构造函数可能会突然破坏事物,因为它可能删除默认构造函数;这会产生后果 - 包括直到运行时才显示的内容(例如反序列化),或者直到库的下游使用者提示您破坏了 API。

同样,如果该类型曾在反射中使用过(可能作为插件):Activator.CreateInstance 用法不会显示错误,因为在运行时之前已移除无参数构造函数。

当然,您是否实际上需要这样做在很大程度上是一个见仁见智的问题。

关于c# - 空构造函数在 C# 中提供了哪些好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49876463/

相关文章:

java - 字符串作为新类的唯一私有(private)字段

c++ - 当包含方括号时,默认构造函数不会在模板类中编译 (g++4.6.1)

c# - Http模块认证

c# - 使用值从哈希表中查找

c# - EF5 和 Winform 的 MySql 异常

PHP 命名空间和构造函数问题

c# - 在 C# 中使用 FakeItEasy 伪造 INI 配置文件设置

javascript - 子类工厂缺少原型(prototype) - Javascript

C++ 用户定义的空默认构造函数与隐式或默认默认构造函数

java - 为什么总是调用父类(super class)构造函数