27.热补丁替换属性和索引器

27.xLua热补丁-属性和索引器替换


27.1 知识点

准备工作

准备一个有属性和索引器的测试类

public class Lesson27_Test : MonoBehaviour
{
    public int[] array = new int[] { 1, 2, 3 };

    //属性
    public int Age
    {
        get
        {
            Debug.Log("C#属性get");
            return 666;
        }
        set
        {
            Debug.Log("C#属性set" + value);
        }
    }

    //索引器
    public int this[int index]
    {
        get
        {
            Debug.Log($"C#索引器get index:{index}");
            if (index >= array.Length || index < 0)
            {
                Debug.Log("索引不正确");
                return -1;
            }

            return array[index];
        }
        set
        {
            if (index >= array.Length || index < 0)
            {
                Debug.Log("索引不正确");
                return;
            }
            Debug.Log($"C#索引器set index:{index} value:{value}");
            array[index] = value;
        }
    }
}

启动Lua脚本 并调用属性和索引器相关

LuaManager.Instance.Init();
LuaManager.Instance.DoLuaFile("Lesson27_xLua热补补丁_属性和索引器替换");

Lesson27_Test test = this.gameObject.AddComponent<Lesson27_Test>();

test.Age = 100;
Debug.Log(test.Age);

test[99] = 100;
Debug.Log(test[9999]);

属性替换

--属性热补丁替换 xet_属性名 把属性当做成员函数替换 set多一个value参数
xlua.hotfix(CS.Lesson27_Test, {

    --get_属性名 是得到属性 的方法
    get_Age = function(self)
        print("Lua属性get")
        return 999;
    end,

    --set_属性名 是设置属性 的方法
    set_Age = function(self, value)
        print("Lua属性set"..value)
    end,

})

索引器替换

--索引器热补丁替换 xet_Item  把索引器当做成员函数替换 都有一个index参数 set多一个value参数
xlua.hotfix(CS.Lesson27_Test, {

    --get_Item 通过索引器获取
    get_Item = function(self, index)
        print("Lua索引器get index:"..index)
        return 999
    end,

    --set_Item 通过索引器设置
    set_Item = function(self, index, value )
        print("Lua索引器set index:"..index .." value:" ..value)
    end

})

27.2 知识点代码

Lesson27_xLua热补丁_属性和索引器替换.lua

print('我是Lua脚本 Lesson27_xLua热补丁_属性和索引器替换')

print("*********知识点一 属性替换***********")

--属性热补丁替换 xet_属性名 把属性当做成员函数替换 set多一个value参数
xlua.hotfix(CS.Lesson27_Test, {

    --get_属性名 是得到属性 的方法
    get_Age = function(self)
        print("Lua属性get")
        return 999;
    end,

    --set_属性名 是设置属性 的方法
    set_Age = function(self, value)
        print("Lua属性set"..value)
    end,

})


print("*********知识点二 索引器替换***********")

--索引器热补丁替换 xet_Item  把索引器当做成员函数替换 都有一个index参数 set多一个value参数
xlua.hotfix(CS.Lesson27_Test, {

    --get_Item 通过索引器获取
    get_Item = function(self, index)
        print("Lua索引器get index:"..index)
        return 999
    end,

    --set_Item 通说索引器设置
    set_Item = function(self, index, value )
        print("Lua索引器set index:"..index .."value:" ..value)
    end

})

Lesson27_xLua热补丁_属性和索引器替换

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;

public class Lesson27_xLua热补丁_属性和索引器替换 : MonoBehaviour
{
    void Start()
    {
        LuaManager.Instance.Init();
        LuaManager.Instance.DoLuaFile("Lesson27_xLua热补丁_属性和索引器替换");

        Lesson27_Test test = this.gameObject.AddComponent<Lesson27_Test>();

        test.Age = 100;
        Debug.Log(test.Age);

        test[99] = 100;
        Debug.Log(test[9999]);

    }
}

[Hotfix]
public class Lesson27_Test : MonoBehaviour
{
    public int[] array = new int[] { 1, 2, 3 };

    //属性
    public int Age
    {
        get
        {
            Debug.Log("C#属性get");
            return 666;
        }
        set
        {
            Debug.Log("C#属性set" + value);
        }
    }

    //索引器
    public int this[int index]
    {
        get
        {
            Debug.Log($"C#索引器get index:{index}");
            if (index >= array.Length || index < 0)
            {
                Debug.Log("索引不正确");
                return -1;
            }

            return array[index];
        }
        set
        {
            if (index >= array.Length || index < 0)
            {
                Debug.Log("索引不正确");
                return;
            }
            Debug.Log($"C#索引器set index:{index} value:{value}");
            array[index] = value;
        }
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏