A-K*_*A-K 7 c# oop inheritance
你可以在我们从一个类继承的时候提供场景,它可以工作一段时间,但是其他东西会改变并引入一个bug吗?我想出了以下情况:
如果我选择在C#中使用对象继承,我应该注意哪些其他问题.
对基类的更改可以通过多种方式影响派生类的行为.如果作者突然决定以课堂sealed
为例怎么办?
像任何界面一样,如果消费者不需要修改,它需要稳定.
具有继承性的主要"规则"是Liskov替代原则.这表明派生类应该可替代基类或从其派生的其他类.
这种情况在它的表面上打破了这个规则,因为带孔的矩形不是矩形.
通常,最好使用接口将行为划分为合理的可实现块.这种界面通常用形容词而不是名词命名.例如,对于矩形和带有孔的矩形都是有意义的,因此接口可能是IRenderable
.如果它是可调整大小的,你可能有一个IResizable
等等.这些可以聚合成一个IShape
,但你要小心你的Shape定义只定义你的问题域中的行为.
直接派生自另一个类可能是危险的,因为您接受该类的行为约束.如果您真的需要这样做,最好将您需要的实现提取到一个公共基类(例如Rectangle : RectangleImplementation, IShape
).