15.Lua调用C#的扩展方法

15.Lua调用CSharp-扩展方法


15.1 知识点

准备工作

// 初始化LuaManager
LuaManager.Instance.Init();
// 执行Lua文件
LuaManager.Instance.DoLuaFile("Lesson15_Lua调用CSharp_扩展方法");

扩展方法

在C#中定义测试类和静态工具类

public class Lesson15_TestClass
{
    public string name = "Lesson15_Lua调用CSharp_扩展方法测试类";

    public void Speak(string str)
    {
        Debug.Log(name + "说话:" + str);
    }

    public static void Eat()
    {
        Debug.Log("Lesson15_TestClass吃东西");
    }
}

//想要在Lua中使用扩展方法 要在扩展方法的静态工具类前面加上[LuaCallCSharp]特性 并重新生成xLua代码
//在Lua中要使用的类 建议都加上[LuaCallCSharp]特性 可以提升性能
//不加该特性 除了扩展方法对应的类 其它类都能正常使用 但是由于lua是通过反射的机制去调用的C#类 效率较低
[LuaCallCSharp]
public static class Lesson15_Tools
{
    //Lesson15_TestClass的扩展方法
    public static void Move(this Lesson15_TestClass testClass)
    {
        Debug.Log(testClass.name + "开始移动");
    }
}

在Lua脚本中调用静态方法、成员方法和扩展方法

--得到类
Lesson15_TestClass = CS.Lesson15_TestClass

--实例化类对象
local Lesson15_testClass = Lesson15_TestClass()

--调用静态方法 类名.静态方法()
Lesson15_TestClass.Eat()--Lesson15_TestClass吃东西

--调用成员方法 类实例:成员方法()
Lesson15_testClass:Speak("哈哈哈哈")--Lesson15_Lua调用CSharp_扩展方法测试类说话:哈哈哈哈

--调用扩展方法 类实例:扩展方法()
--注意:想要在Lua中使用扩展方法 要在扩展方法的静态工具类前面加上[LuaCallCSharp]特性 并重新生成xLua代码
Lesson15_testClass:Move()--Lesson15_Lua调用CSharp_扩展方法测试类开始移动

15.2 知识点代码

Lesson15_Lua调用CSharp_扩展方法.lua

print('我是Lua脚本 Lesson15_Lua调用CSharp_扩展方法')


print("**********知识点一 扩展方法************")

--得到类
Lesson15_TestClass = CS.Lesson15_TestClass

--实例化类对象
local Lesson15_testClass = Lesson15_TestClass()

--调用静态方法 类名.静态方法()
Lesson15_TestClass.Eat()--Lesson15_TestClass吃东西

--调用成员方法 类实例:成员方法()
Lesson15_testClass:Speak("哈哈哈哈")--Lesson15_Lua调用CSharp_扩展方法测试类说话:哈哈哈哈

--调用扩展方法 类实例:扩展方法()
--注意:想要在Lua中使用扩展方法 要在扩展方法的静态工具类前面加上[LuaCallCSharp]特性 并重新生成xLua代码
Lesson15_testClass:Move()--Lesson15_Lua调用CSharp_扩展方法测试类开始移动

Lesson15_Lua调用CSharp_扩展方法

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

public class Lesson15_Lua调用CSharp_扩展方法 : MonoBehaviour
{
    void Start()
    {
        LuaManager.Instance.Init();
        LuaManager.Instance.DoLuaFile("Lesson15_Lua调用CSharp_扩展方法");
    }
}

public class Lesson15_TestClass
{
    public string name = "Lesson15_Lua调用CSharp_扩展方法测试类";

    public void Speak(string str)
    {
        Debug.Log(name + "说话:" + str);
    }

    public static void Eat()
    {
        Debug.Log("Lesson15_TestClass吃东西");
    }
}

//想要在Lua中使用扩展方法 要在扩展方法的静态工具类前面加上[LuaCallCSharp]特性 并重新生成xLua代码
//在Lua中要使用的类 建议都加上[LuaCallCSharp]特性 可以提升性能
//不加该特性 除了扩展方法对应的类 其它类都能正常使用 但是由于lua是通过反射的机制去调用的C#类 效率较低
[LuaCallCSharp]
public static class Lesson15_Tools
{
    //Lesson15_TestClass的扩展方法
    public static void Move(this Lesson15_TestClass testClass)
    {
        Debug.Log(testClass.name + "开始移动");
    }
}


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

×

喜欢就点赞,疼爱就打赏