You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#子类调用父类FixedUpdate时,如何让父类执行子类重写的bar方法?

问题解答:子类调用父类foo时触发自身bar方法

嘿,这个需求完全可以实现!不过你当前的代码写法有个小细节得调整下,不然没办法让子类的bar被父类的foo调用到。

先看看你的原始代码:

原始父类代码

public class Parent { 
    protected void foo() { bar(); } 
    protected void bar() { thing_a(); } 
}

原始子类代码

public class Child : Parent { 
    protected void bar() { thing_b(); } 
}

现在的问题在于:你子类里的bar只是隐藏了父类的同名方法,而不是真正的重写。这种情况下,父类的foo调用bar时,只会执行父类自己的bar逻辑,压根不会管子类里的版本。

要解决这个问题很简单,只需要给方法加上两个关键字,利用C#的多态特性就行:

  • 在父类的bar方法前加上virtual,标记这个方法允许被子类重写
  • 在子类的bar方法前加上override,明确告诉编译器这是对父类方法的重写

修改后的代码如下:

调整后的父类

public class Parent { 
    protected void foo() { bar(); } // 现在这里的bar会根据实例的实际类型调用对应版本
    protected virtual void bar() { thing_a(); } 
}

调整后的子类

public class Child : Parent { 
    protected override void bar() { thing_b(); } 
}

这样一来,当你在Unity中创建Child的实例,它的FixedUpdate(也就是你代码里的foo)执行时,就会自动调用子类重写后的bar方法了。既保留了父类FixedUpdate里的其他操作,又能在子类中自定义bar的功能,完美契合你的需求!

内容的提问来源于stack exchange,提问作者e2298

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:08:58