为什么构造函数不能继承?

Est*_*aya 35 c# oop inheritance

我猜我有一些关于C#继承的基本功能,我不明白.有人请赐教吗?

rec*_*ive 32

有时,在子类化时,您希望限制创建类实例所需的条件.

让我给你举个例子.如果类确实继承了它们的超类构造函数,那么所有类都将具有无参数构造函数Object.显然这不正确.

  • 这解释了为什么默认情况下没有这样做,而不是为什么一般不允许这样做.即为什么不能将构造函数指定为`virtual` ... (6认同)

Roa*_*ior 29

如果你仔细想想,如果构造函数会发生什么继承,你应该开始看到这个问题.

由于.NET中的几乎所有类型都继承自Object(它具有无参数构造函数),这意味着您创建的几乎所有类型都将被强制使用无参数构造函数.但是有许多类型的参数构造函数没有意义.

版本控制也会出现问题.如果基本类型的新版本与新构造函数一起出现,您将自动在派生类型中获得新的构造函数.这将是一件坏事,以及脆弱的基类问题的特定实例.

还有一个更哲学的论点.继承是关于类型责任(这就是我所做的).构造函数是关于类型协作(这是我需要的).因此,继承构造函数将混合类型责任与类型协作,而这两个概念应该真正保持独立.

  • @CuiPengFui换句话说,当你继承方法时,你继承了行为 - 但是如果你继承了构造函数,你继承了基类的*needs*.因此构造函数继承可以说,基类的作者可以预测任何可能在将来扩展它的类的需求.我写了一篇关于这个主题的更长的解释[这里](http://stackoverflow.com/a/17472936/283851) (2认同)

cle*_*tus 12

无论您是否明确地调用它们,都会调用超类中的构造函数.他们从父类下来.如果构造函数没有在其超类中显式调用构造函数,则在构造函数的代码之前隐式调用该类中的默认构造函数.