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
相关产品推荐
相关产品推荐

