什么时候应该在重写方法中调用base.Method(),以及在团队中编写代码时如何标记?

当使用一些框架/ api时,有时候你不清楚是否必须调用base.Method如果你覆盖它,例如你可以非常肯定你应该在覆盖事件调用器时调用base.Maethod()来传播事件在其他情况下,它可能不是那么清楚,尤其是在没有可用的源代码且没有注释的情况下。

我想知道其他程序员在这种情况下如何决定是否应该调用基本方法,如果你要编写一些框架如何通知其他程序员你希望在虚拟成员中调用或不调用基本方法。

现在我不认为覆盖方法的类的消费者应该需要调用base.Method()。 代码应该以不会被破坏的方式编写。

public class MyBase { private void FooInternal() { DoRequiredStuff(); Foo(); } public virtual void Foo() {} } 

如果您要求您的类的使用者必须实现特定方法的function,则该方法应标记为抽象。

如果您的类的使用者应该可选地提供特定方法的function,那么该方法应该是虚拟的。

实际上没有办法要求类的使用者在虚方法上调用base.Method()。 这实际上取决于背景。 如果base.Method()做了一些你不得不做的工作,那么你应该调用base.Method(),如果这样可以节省一些开发时间/它在该上下文中是有意义的。

这取决于是否需要使用底层function。

例如,如果基础对象具有一些需要运行的通用数据库function,请在最后调用基本方法。 如果您的代码覆盖了基本方法将设置的某些属性,则首先调用基本方法。

如果没有源代码或文档,RedGate的.Net Reflector(http://www.red-gate.com/products/dotnet-development/reflector/)可以解压您正在尝试使用的程序集,您可以看到代码有效。