我怎么能记住超级呼叫父母?

时间:2016-06-19 21:45:38

标签: c# visual-studio inheritance visual-studio-2015 method-overriding

我正在使用Unity,其中有一些非常常见的方法,例如Start()Update()。每当我从另一个类继承时,我都会覆盖父方法,但我总是忘记拨打base.ParentMethod();

我是否有办法阻止自己这样做?它会导致很多错误,我浪费了很多时间来搜索。 Visual Studio中是否有一个设置,当我覆盖某些内容时会自动调用基本方法?我可以做一些检查,看看哪些方法我忘记进行基本调用?

理想情况下,当我忘记进行基本调用时,我想强制Visual Studio向我发出警告。我可以这样做,还是类似的东西?

3 个答案:

答案 0 :(得分:3)

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

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

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

protected abstract void TheMethodCore();

这样,派生类就无法忘记"调用基本方法;始终会调用DoSomethingImportant

答案 1 :(得分:1)

一旦您使用下面的继承定义了类,就不必手动覆盖基本方法;键入override并点击spacebar,这将显示所有可以覆盖的方法,一旦您选择了一个基类成员,它将自动生成方法存根以及行base.method(); in被覆盖的方法体。

public class myclass : parentclass
{

}

**如果没有错,这个技巧甚至可以在Visual Studio 2010

中使用

答案 2 :(得分:0)

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