Unity开发避坑指南:C#中override和new用错,你的游戏逻辑可能全乱套

Unity开发避坑指南:C#中override和new用错,你的游戏逻辑可能全乱套

在Unity游戏开发中,C#的继承体系是构建复杂系统的基石。但当你面对overridenew这两个看似简单的关键字时,稍有不慎就可能埋下难以追踪的Bug。想象这样的场景:你的武器系统在测试时表现完美,但在实际运行时,霰弹枪突然开始像步枪一样点射——这种诡异行为往往源于对方法重写和覆盖的误解。

1. 从武器系统案例看方法调用的本质差异

假设我们有一个基础武器类Weapon,其中定义了一个虚方法Fire()

public class Weapon {
    public virtual void Fire() {
        Debug.Log("Base weapon fire");
    }
}

现在创建两个子类:RifleShotgun。步枪采用override重写,霰弹枪使用new覆盖:

public class Rifle : Weapon {
    public override void Fire() {
        Debug.Log("Rifle single shot");
    }
}

public class Shotgun : Weapon {
    public new void Fire() {
        Debug.Log("Shotgun spread shot");
    }
}

关键差异出现在通过父类引用调用时:

List<Weapon> weapons = new List<Weapon> { new Rifle(), 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值