Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从基函数停止重写函数_C#_.net - Fatal编程技术网

C# 从基函数停止重写函数

C# 从基函数停止重写函数,c#,.net,C#,.net,我有一个名为Update()的基void函数,它必须确定是否应该处理覆盖Update()。正如我所理解的,一个简单的回报;在基本功能中,仅停止基本功能,而不停止覆盖。那么,有没有一种方法可以做到这一点,而不用在覆盖中写入base.Update()以外的内容 protected virtual void Update() { if (someArgument) { //Some code to stop the override from being process

我有一个名为Update()的基void函数,它必须确定是否应该处理覆盖Update()。正如我所理解的,一个简单的回报;在基本功能中,仅停止基本功能,而不停止覆盖。那么,有没有一种方法可以做到这一点,而不用在覆盖中写入base.Update()以外的内容

protected virtual void Update()
{
    if (someArgument)
    {
        //Some code to stop the override from being processed
    }
}

protected override void Update()
{
    base.Update(); //It would be great if I didn't need to write anything more than this line to stop the override function
    //Some other code
}

如果您有另一个虚拟方法,那么您可以决定是否应该调用重写的方法。像这样的。但是不能从基类停止重写方法的执行

class BaseClass
{
    protected void Update()
    {
        if(someArgument)
        {
            this.InnerUpdate();
        }
    }

    protected virtual void InnerUpdate()
    {
    }
}

class Foo : BaseClass
{
    protected override void InnerUpdate()
    {
        //Some other code
    }
}

您是否可以重新设计它,使
Update
返回一个
bool
,以指示基本方法中出现的任何情况?不,恐怕是Update()必须是无效的,因为它是引擎中内置的函数。在这种情况下,似乎您真正能做的就是在运行基本方法后检查相同的条件。您不能强制调用上下文正常返回,尽管您可以通过提交自杀(抛出异常(它无法捕获))强制终止其执行或者直接杀死线程或整个过程)。任何合理的方式来做你所要求的事情都依赖于打电话的人检查一些东西,然后决定返回。但这是干什么的?我觉得这个奇怪的问题本来是可以避免的。基层不知道他们的孩子。您现在可以创建一个基类,10000年后,其他开发人员可能会创建一个全新的类来继承您的基类。您的基类如何停止10000年后将诞生的类的执行?(无论如何,我猜你可能正在使用Unity游戏引擎:D)好主意!这完美地解决了我的问题!非常感谢:)