发现unity2022上的一个bug,涉及反射GetMethod与重写override

1 篇文章 0 订阅

24年1月17日再次更新,unity通知我bug将在2023.2.7f1版本中修复

代码如下

using System;
using UnityEngine;

public class testMB : MonoBehaviour
{
    void Start()
    {
        test2 t = new test2();
        t.Run();
    }
}

public class test2 : test
{
    public override void A(string s)
    {
        Debug.Log("O:" + s);
    }
}

public class test
{

    public virtual void A(string s)
    {
        Debug.Log("V:" + s);
    }

    public void Run()
    {
        Action<string> o = A;
        object action = o;
        var invokeMethod = action.GetType().GetMethod("Invoke");
        invokeMethod.Invoke(action, new object[] { "1-1" });
        invokeMethod.Invoke(action, new object[] { "1-2" });
        var invokeMethod2 = action.GetType().GetMethod("Invoke");
        invokeMethod2.Invoke(action, new object[] { "2-1" });

        var invokeMethod3 = action.GetType().GetMethod("Invoke");
        invokeMethod3.Invoke(action, new object[] { "3-1" });
    }
}

输出结果如下:

O:1-1

V:1-2

V:2-1

V:3-1

第二次开始,没有执行重写方法,而是执行了原始方法!

经过多台电脑测试,在unity2022上错误,在unity2020等之前版本上正常。

与切换.net版本无关。

大家也可以试一下这段代码。

我于23年11月9日向Untiy官方反馈了此BUG,他们也确认了此BUG

再次更新,23年12月15日,unity通知我bug已修复

24年1月17日再次更新,unity通知我bug将在2023.2.7f1版本中修复

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值