抽象基类和构造函数可见性

时间:2010-06-30 08:50:36

标签: c# abstract-class

我通常会创建一个基类abstract来提供信号这是一个基类 - 你无法实例化我!即使其中没​​有抽象方法。

此外,我总是使基类构造函数受到保护,虽然没有真正的功能需要这样做 - 我只想提出另一点,这是一个基类 - 你无法实例化我!

我这样做是否会跳过篮球?你做什么的?

3 个答案:

答案 0 :(得分:9)

这似乎是合理的,是的。构造函数在公共或受保护之间没有任何功能差异,但使其受到保护可以更清楚地表明预期用途。

答案 1 :(得分:2)

如果没有抽象方法,我不确定你应该将类设置为抽象。如果它具有从它派生的类所期望的功能的完整实现,为什么不让它实例化并按原样使用?如果这只是一种在一系列类别中共享功能的方法,那么基于组合的设计可能更合适,即。让每个'派生'类引用此类,而不是从它派生。

您是否有特定的情况,这可能是一个合适的设计?

编辑
我发现没有抽象方法的抽象类有意义的唯一场景是抽象类部分实现和接口。派生类是完成实现所必需的。

Link to example (编辑:网站不见了,This blog post似乎是内容的副本)

答案 2 :(得分:1)

在抽象类中,public或protected构造函数之间没有区别。事实上,我认为编译器在将抽象类的构造函数定义为public时应该给出警告或错误。太糟糕了,没有。