40

是否可以在派生类中重写基类的构造函数?

如果是这样,它是如何实现的,在什么用例中这将是实用的?如果不是,为什么不呢?

4

3 回答 3

54

不,您不能覆盖构造函数。这个概念在 C# 中没有意义,因为构造函数根本不会被多态调用。你总是说明你试图构造哪个类,以及构造函数的参数。

构造函数根本不被继承——但是派生类的所有构造函数都必须链接到同一类中的另一个构造函数,或者链接到基类中的一个构造函数。如果您不显式执行此操作,编译器会隐式链接到基类的无参数构造函数(如果该构造函数不存在或不可访问,则会发生错误)。

于 2012-06-30T06:15:38.710 回答
16

不,构造函数不是继承的。您不能在派生类中覆盖它们。
原因

对于从 object 派生的每个类,将始终调用基本构造函数,因为每个类必须至少有一个调用 base() 构造函数(显式或隐式)的构造函数,并且每次调用 this() 构造函数最终都必须调用一个base() 构造函数。

于 2012-06-30T06:19:47.150 回答
8

不,您不能覆盖构造函数。

如果您查看构造函数的基本语法,它应该与您编写它的类具有相同的名称。

比方说,你写了一个与基类同名的方法(与基类构造函数相同),它只是派生类中的一个新方法,没有指定返回类型,这在语法上是不正确的。

于 2012-06-30T06:23:46.730 回答