一尘不染

为什么用参数创建默认的无参数构造函数会消失

c#

在C#,C ++和Java中,创建带有参数的构造函数时,默认的无参数函数将消失。我一直只是接受这个事实,但是现在我开始怀疑为什么。

这种行为的原因是什么?难道仅仅是“安全措施/猜测”这样的说法:“如果您创建了自己的构造函数,那么您 可能
不希望这种隐式的构造函数徘徊”?还是出于技术原因,一旦您自己创建了构造函数,编译器就不可能添加一个?


阅读 572

收藏
2020-05-19

共1个答案

一尘不染

如果您添加了自己的构造器,则没有理由编译器无法添加构造函数-编译器可以执行几乎所有需要的操作!但是,您必须查看最有意义的内容:

  • 如果我还没有为非静态类定义 任何 构造函数,那么我很可能希望能够实例化该类。为了做到这一点,编译器 必须 添加一个无参数的构造函数,该构造函数除了允许实例化之外没有其他作用。这意味着我不必为了使其正常工作而在代码中包含空的构造函数。
  • 如果我定义了自己的构造函数,尤其是带有参数的构造函数,那么我很可能具有自己的逻辑,必须在创建类时执行该逻辑。如果在这种情况下,编译器创建一个空的,无参数的构造函数,它将允许某人 跳过 我编写的逻辑,这可能导致我的代码以多种方式中断。如果在这种情况下我想要一个默认的空构造函数,则需要这样明确地说。

因此,在每种情况下,您都可以看到,就保留代码的 可能意图 而言,当前编译器的行为最有意义。

2020-05-19