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

奥拉焦:

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

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

丹·普泽(Dan Puzey):

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ASPX-为什么调用无参数构造函数,而跳过带参数的构造函数?

为什么RNGCryptoServiceProvider的构造函数会忽略其参数?

为什么用作默认参数的函数文字需要参数类型?

&在函数参数中有什么用?

为什么将默认参数构造函数称为默认构造函数

为什么用一个参数而不是两个参数调用释放函数?

为什么.NET Core DI首选构造函数而不是无参数构造函数接受IEnumerable <T>?

为什么必须由常量表达式或值类型的无参数构造函数指定可选参数的默认值?

为什么用其值替换参数会导致错误?

如果父类具有带参数的构造函数,为什么默认构造函数是必需的?

为什么在添加参数化构造函数时默认构造函数不起作用?

为什么默认构造函数和参数化构造函数都在一个类中?

为什么JsonConvert对待默认构造函数和参数化构造函数不同?

依赖注入:在无参数构造函数中实例化具体类时,您会失去什么

为什么在我的实体模型类中添加无参数构造函数?这意味着什么?

为什么这不创建默认构造函数?

提供与声明的默认无参数构造函数的区别

Gson是否必须使用默认的无参数构造函数?

理解函数参数声明中的 Go 指针:为什么用 * 而不是 &?

为什么用函数参数应用println失败而不能打印?

构造函数为什么不设置参数?

为什么 std::map::operator[] 赋值需要无参数构造函数?

为什么需要一个无参数的构造函数来运行此简单的Spring配置?

为什么无参数构造函数必须以无效状态实例化?

为什么JPA要求域对象使用无参数构造函数?

为什么String类没有无参数的构造函数?

为什么XML-Serializable类需要无参数构造函数

为什么一个元组在`[Serializable]`时没有无参数构造函数?

为什么在使用Activator.CreateInstance时需要定义无参数构造函数?