是否可以在C#中覆盖构造函数?

nav*_*val 34 c# oop constructor

是否可以覆盖派生类中的基类的构造函数?

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

Jon*_*eet 50

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

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

  • "这个概念毫无意义,真的 - 构造函数根本不是多态的." - 在德尔福,他们是.这是一个非常有用的功能,我通过使用反射和传递运行时检查的`Type`实例,或者通过提供单独的工厂类来找到C#中所需的变通方法,相比之下相当繁琐. (4认同)
  • @ORMapper:是的,我在C#的背景下谈论.其他语言的作用与此答案无关. (4认同)
  • 在这种情况下,我建议答案并没有声称"这个概念毫无意义,真的",因为这听起来很普遍.像"这个概念很有意义,但是不可能在C#中使用这个概念,因为构造函数不会在那里被多态调用." 可能会更清楚. (4认同)
  • 足够公平 - 只要"我不能说它有多么有用"并不会导致结论"它通常没有任何意义.",我很高兴:) (2认同)
  • 为了完整起见,[这里](http://stackoverflow.com/a/24605022/1430156),[这里](http://stackoverflow.com/questions/1584670/what-design-patterns-do-you -inmplement-in-common-delphi-programming/1585004#1585004)和[here](http://stackoverflow.com/questions/9280546/overriden-and-non-overridden-constructor/9280856#9280856)是一些例子相应的Delphi功能,仅为我声称此功能存在的未来访问者提供参考. (2认同)

She*_*ezi 15

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

对于从object继承的每个类,总是会调用一个基本构造函数,因为每个类必须至少有一个构造函数调用base()构造函数(显式或隐式),并且对this()构造函数的每次调用都必须最终调用一个base()构造函数.


Viz*_*ard 8

不,你不能覆盖构造函数.

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

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