当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么构造函数不能继承?》经验,为你挑选了3个好方法。

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



1> recursive..:

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

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


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

2> RoadWarrior..:

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

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

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

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


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

3> cletus..:

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

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有