xlua怎么样hotfix C#中的重写方法???
问题的来源之这样的:
线上项目遇到一个问题,就是子类 override 了父类的一个 virtual 方法,并且调用到了父类里面的 virtual 方法。现在子类 override 的方法里有一些错误逻辑,希望通过 xlua 去修复。类似如下的代码:
1 using System; 2 using UnityEngine; 3 4 namespace LGSTEST 5 { 6 public class LgsParent : MonoBehaviour 7 { 8 public virtual void ShowName() 9 { 10 Debug.Log("parent function!"); 11 } 12 } 13 14 public class Lgs : LgsParent 15 { 16 void Update() 17 { 18 if (Input.GetMouseButtonDown(0)) 19 { 20 ShowName(); 21 } 22 } 23 24 public override void ShowName() 25 { 26 base.ShowName(); 27 28 Debug.Log("child function!"); 29 30 #region 错误的逻辑 31 32 #endregion 33 } 34 } 35 }
xlua代码:
1 xlua.hotfix(CS.LGSTEST.Lgs, "ShowName", function(self) 2 3 base(self):ShowName(); 4 5 --[[ 6 修复后的逻辑放到这里 7 --]] 8 9 end)
也就是说 C# 第 26 行的写法,对应 xlua 中的第 3 行写法