C#类是否继承构造函数?

cja*_*cja 9 c#

我刚看了http://blog.gurock.com/articles/creating-custom-exceptions-in-dotnet/

我不知道什么时候写的.它说:

"遗憾的是,由于C#不继承基类的构造函数,因此这种新类型只具有没有参数的标准构造函数,因此相对无用."

这在2010年也是如此:C#:继承构造函数

这仍然是真的吗?

编辑:继续回答,我确信有一种方法可以绕过默认的无参数构造函数.缺少构造函数继承还有其他原因吗?

Bol*_*ock 13

构造函数在C#语言的整个生命周期中从未被继承过.在C#5.0中没有改变:在C#5.0规范的1.6.7.1节末尾,它仍然说:

与其他成员不同,实例构造函数不是继承的,并且除了在类中实际声明的实例之外,没有实例构造函数.如果没有为类提供实例构造函数,则会自动提供没有参数的空构造函数.

所以它今天仍然适用,我想在可预见的未来它仍然如此.


Run*_* FS 5

除非基类定义了默认的构造函数,否则您必须显式调用基类的构造函数。所以是的,它们不是继承的。

有时这会导致一堆样板代码,您除了将参数从一个构造函数传递到另一个构造函数外,什么也不做

public class NegativArgument : Exception {
     public NegativeArgument() : this("The number given was less than zero"){}
     public NegativeArgument(string message) : this(message,null){}
     public NegativeArgument(string message, Exception inner) : base:(message,inner){}
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您的异常类型应始终具有相同的消息,该怎么办?如果构造函数被继承,您将如何解决?异常类具有一个接受消息的构造函数,因此在这种情况下,创建一个新的Exception类型也将获得该构造函数,而无需继承该构造函数就很容易

public class NegativArgument : Exception {
     public NegativeArgument() : base("The number given was less than zero"){}
}
Run Code Online (Sandbox Code Playgroud)

如果基类没有默认的构造函数,那么如果不显式调用基类构造函数,则会出现编译错误。