为什么默认的无参数构造函数在创建带有参数的构造函数时消失
2022-08-31 07:05:43
在 C# 中,C++和 Java,当您创建一个采用参数的构造函数时,默认的无参数构造函数将消失。我一直只是接受这个事实,但现在我开始想知道为什么。
这种行为的原因是什么?它只是一个“安全措施/猜测”说“如果你已经创建了自己的构造函数,你可能不希望这个隐含的构造函数徘徊”?或者它是否具有技术原因,使得编译器在您自己创建构造函数后无法添加一个?
在 C# 中,C++和 Java,当您创建一个采用参数的构造函数时,默认的无参数构造函数将消失。我一直只是接受这个事实,但现在我开始想知道为什么。
这种行为的原因是什么?它只是一个“安全措施/猜测”说“如果你已经创建了自己的构造函数,你可能不希望这个隐含的构造函数徘徊”?或者它是否具有技术原因,使得编译器在您自己创建构造函数后无法添加一个?
如果您添加了自己的构造函数,则编译器没有理由不能添加构造函数 - 编译器几乎可以做任何它想要做的事情!但是,您必须查看最有意义的内容:
因此,在每种情况下,您都可以看到当前编译器的行为在保留代码的可能意图方面最有意义。
当然,没有技术原因为什么语言必须以这种方式设计。
我可以看到四个有点现实的选择:
选项 1 有点吸引人,因为我编码的次数越多,我真正想要无参数构造函数的频率就越低。有一天,我应该数一下我最终使用默认构造函数的频率......
选项2我很好。
对于语言的其余部分,选项 3 与 Java 和 C# 的流程背道而驰。你从来没有明确“删除”过任何东西,除非你明确地让事情比Java中的默认值更加私密。
选项4是可怕的 - 你绝对希望能够用某些参数强制建造。这是什么意思?new FileStream()
所以基本上,如果你接受提供默认构造函数是有意义的前提,我相信一旦你提供自己的构造函数就禁止它很有意义。