首页 > 技术文章 > xlua怎么样hotfix C#中的重写方法???

luguoshuai 2018-12-11 11:42 原文

问题的来源之这样的:

线上项目遇到一个问题,就是子类 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 行写法

推荐阅读