我目前正在开发一个使用带默认实现的抽象类的API。虽然我在过去已经这样做了,但我还没有真正想到在派生类中调用base.SomeMethod()的哲学含义,因为API不是为了公共消费。由于此API旨在公开显示,我想知道如何处理回调到基类的调用。我可以假设基本调用将始终在派生实现中首先或最后发生,我只是记录实现者的假设吗?或者基类调用是否没有副作用,因此实现者调用基类时无关紧要?对此有经验法则吗?
感谢。
答案 0 :(得分:0)
恕我直言,这在很大程度上取决于你的特定班级的需求。如果要确保调用基本行为(甚至可能按特殊顺序),可以使用template method。我发现这种模式是一种以受控方式提供子类扩展点的非常优雅的方式,我认为比向开发人员发表评论更好。
明显的缺点是,如果你选择糟糕的钩子,你可能会限制其他开发者太多。我记得有一两次不得不重写模板方法,因为钩子不允许我执行我需要的行为。
HTH