我怎么记得超级调用 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
总会被调用。
我用的是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
总会被调用。