xlua怎么样hotfix C#中的重写方法???
2021-06-26 16:04
标签:继承 system 错误 base 设计 比较 -- inpu 来源 问题的来源之这样的: 线上项目遇到一个问题,就是子类 override 了父类的一个 virtual 方法,并且调用到了父类里面的 virtual 方法。现在子类 override 的方法里有一些错误逻辑,希望通过 xlua 去修复。类似如下的代码: 现在遇到的问题是,在 xlua 中,怎样写第26行的逻辑???当然了,如果这个继承关系只是普通的父类到子类的一对一的对应关系,可以用 xlua 对父类中的方法重新写一遍。但是,如果父类是一个类似项目里面的 UI 基类这样的父类,父类中的 virtual 方法可能随时会改动,这样的话,不可能说每次改动父类的时候,都用 xlua 对父类里的逻辑写一遍。 由于我没有想到通过什么样的方法,在 xlua 中去写第 26 行的逻辑,所以个人建议,在前期设计C#中的基类的时候就考虑的这个问题。什么意思,现在对以上的代码做如下调整: 这样的话,在 xlua 中对子类 override 方法中的错误逻辑就很好修改了,如下: 运行结果: 所以,个人建议,如果项目打算用C#开,后期通过xLua修复问题的时候,对改动比较频繁的类的继承关系,尽量避免 base 关键字的直接使用,可以通过另外的手段去替代,就比如上的方式,在父类中定义一个父对象字段。 以上仅是由于个人知识有限,才想出的解决方式。 xlua怎么样hotfix C#中的重写方法??? 标签:继承 system 错误 base 设计 比较 -- inpu 来源 原文地址:https://www.cnblogs.com/luguoshuai/p/10101265.html 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 }
1 using System;
2 using UnityEngine;
3
4 namespace LGSTEST
5 {
6 public class LgsParent : MonoBehaviour
7 {
8 public LgsParent parent = null;
9
10 public void InitParent()
11 {
12 if (null == parent)
13 parent = new LgsParent();
14 }
15
16 public virtual void ShowName()
17 {
18 Debug.Log("parent function!");
19 }
20 }
21
22 public class Lgs : LgsParent
23 {
24 void Start()
25 {
26 InitParent();
27 }
28
29 void Update()
30 {
31 if (Input.GetMouseButtonDown(0))
32 {
33 ShowName();
34 }
35 }
36
37 public override void ShowName()
38 {
39 if (null != parent)
40 parent.ShowName();
41
42 Debug.Log("child function!");
43
44 #region 错误的逻辑
45
46 #endregion
47 }
48 }
49 }
1 xlua.hotfix(CS.LGSTEST.Lgs, "ShowName", function(self)
2 self.parent:ShowName();
3
4 --[[
5 修复后的逻辑放到这里
6 --]]
7
8 end)