【发布时间】:2015-04-20 10:36:38
【问题描述】:
我对 C# 中“默认构造函数”的含义感到非常困惑。许多人,包括我的编程教授,只是将任何无参数构造函数称为“默认构造函数”(如问答here 或here)。甚至default-constructor 上的 SO 标签 wiki 也说它是“一个无参数的构造函数......通常(注意它经常说,并非总是如此)由编译器生成”。
如果要遵循这个逻辑,构造函数是否“默认”取决于你如何调用它。 IE。如果你可以称它为“默认”方式,不带任何参数,它就是一个默认构造函数。
但是,MSDN,如果我没看错的话,似乎只将名称“默认构造函数”赋予了在没有指定其他构造函数时隐式生成的无参数构造函数,调用无参数基类构造函数,并且(与任何其他构造函数一样)将class 的字段初始化为其值。
仔细想想,这比"default" == "parameterless" 更有意义:当您没有选择其他任何东西时,隐式生成的构造函数有点像默认选项。
那么,是否正确把所有无参构造函数都调用默认构造函数?
或者是否正确调用public C(): base() {}(用于常规类)和protected C(): base() {}(用于抽象类)形式的显式构造函数默认构造函数,因为它们符合默认构造函数的描述MSDN 上的构造函数?
或者这个术语真的适用只适用于隐式生成的构造函数?
还有(可能是最重要的问题):最广泛接受的术语定义是正确还是错误?
【问题讨论】:
-
Po-tae-toe,Po-ta-toe。你似乎一点也不困惑。您在隐式生成的无参数构造函数的上下文中了解默认与无参数。除了争论语义,陈述事物的上下文和观点之外,几乎不需要进一步探索这个主题。继续你的生活。
-
如果你喜欢收集这种被滥用的术语,你可能还想看看条件运算符(它是 a 三元运算符,目前只有一个,但是那不是它的名字);按引用传递与按值传递;可选参数和命名参数(以及一般的参数/参数,老实说)。
标签: default-constructor c# constructor terminology default-constructor