我见过许多框架和辅助类,它们要求您base.MethodName()
在继承的类覆盖中调用它们 some MethodName()
。但是,其中一些要求它是被覆盖方法中的最后一次调用,而另一些则要求它是第一次调用。应该以哪种方式调用它并不总是很明显,通常只能通过阅读文档或示例才能弄清楚。
那么,我的结论是否正确,在该领域没有一些最佳实践,并且base
在覆盖方法中调用方法位置仅取决于框架设计器?或者有,我应该更喜欢某种设计而不是另一种?就我个人而言,我发现首先调用 base 更加自然,就像在构造函数中一样(强制执行此设计)。还是有一些情况(或领域)迫使开发人员使用特定的调用顺序?
更新。在@Attila 的帮助下,我现在可以看到,大多数base
类调用都可以重新设计。而不是这个:
// FRAMEWORK
public virtual void SomeMethod()
{
// framework code
}
// USAGE
public override void SomeMethod()
{
base.SomeMethod();
// user code
}
做这个:
// FRAMEWORK
public void SomeMethod()
{
// framework code
// you can place UserSomeMethod where you want,
// you can change it position in new versions of a fremework
// without breaking user code
this.SomeMethodUserCode();
}
protected abstract void SomeMethodUserCode();
// USAGE
protected override void SomeMethodUserCode()
{
// user code
}
用户失去了一些灵活性(可以理解为“有更少的选项来破坏,或者让你的框架工作错误”),但使用起来很简单。