我怎么记得超级调用 parent?

How can I remember to supercall the parent?

我用的是Unity,里面有几个很常用的方法,比如Start()Update()。每当我从另一个 class 继承时,我都会覆盖 parent 的方法,但我总是忘记调用 base.ParentMethod();.

有什么方法可以防止我这样做吗?它会导致很多错误,我浪费了很多时间来寻找。 Visual Studio 中是否有设置会在我覆盖某些内容时自动调用基本方法?是否可以进行某种检查以查看我忘记为哪些方法进行碱基调用?

理想情况下,我想强制 Visual Studio 在我忘记进行碱基调用时给我一个警告。我可以做这个或类似的事情吗?

不用手动重写基方法,一旦你定义了你的 class 继承如下;输入 override 并点击 spacebar 这将调出所有可以覆盖的方法,一旦你 select baseclass 的成员之一,它将自动生成方法存根在重写的方法体中使用 base.method(); 行。

public class myclass : parentclass
{

}

**如果没记错的话,这个技巧在Visual Studio 2010

中也有效

如果您只是从 InteliSense 编写覆盖和 select 方法,则由 Visual Studio 完成。但是,由于 Roslyn,您还可以创建(或找到一些)分析器来检查它并在编译后抑制一些 warning/info(我不确定它是否适用于 Unity)。

解决此问题的常用方法是使用 Template Method pattern。在基class中,将方法密封,调用另一个抽象或虚方法:

public sealed TheMethod()
{
    // Do something that should always be done
    DoSomethingImportant()

    // Call the derived class implementation
    TheMethodCore();
}

protected abstract void TheMethodCore();

这样派生的class到"forget"就没有办法调用基方法了; DoSomethingImportant 总会被调用。