XLua教程之Lua调用C#

测试模板

cs 复制代码
public class Test
{
    public int num1;//实例变量
    public static int num2 ;//静态变量
   
    private string flag1;
    public string Flag1 => flag1; //实例属性
    
    private static string flag2;
    public static string Flag2 => flag2;//静态属性

    //委托
    [CSharpCallLua]
    public delegate int GetSumEventHandler(int a, int b);
    public GetSumEventHandler GetSumLogic;
    
    //构造函数
    public Test(int _num1,int _num2)
    {
        num1 = _num1;
        num2 = _num2;

        flag1 = "好好学习";
        flag2 = "天天向上";
    }
    
    //实例方法
    public void Say()
    {
        Debug.Log("Hello World!");
    }
    
    //静态方法
    public static void Say1()
    {
        Debug.Log("Hello World!");
    }

    //ref参数方法
    public void RefFunc(int a,ref int b,ref int c,int d)
    {
        b = a+d;
        c = a-d;
      
    }
    //out参数方法
    public string OutFunc(int a,out int b,out int c,int d)
    {
        b = a +d;
        c = a -d;
        return "Lua调用Out函数";
    }
    //ref参数+out参数方法
    public int RefAndOutFunc(int a,ref int b,out int c)
    {
        b = a * 3;
        c = a * 9;
        return 250;
    }
}

new C#对象

所有C#的类都放在CS字段中。如果需要经常访问的类,可以先用局部变量引用后访问,除了减少敲代码的时间,还能提高性能:

Lua 复制代码
local Class = CS.Test
local test = Class(111,222)

访问C#静态变量和实例变量

使用逗号访问

Lua 复制代码
test.num1--实例变量
test.num2--静态变量

访问C#静态属性和实例属性

使用逗号访问

Lua 复制代码
test.Flag1--实例属性
test.Flag2--静态属性

调用C#静态方法和实例方法

静态方法使用逗号调用

实例方法使用冒号调用(即将调用对象作为第一参数传入)

Lua 复制代码
local Class = CS.Test
local test = Class(111,222)
test:Say()--实例方法
Class.Say1()--静态方法

调用C#有out参数和ref参数的方法

1、如果C#函数有返回值,那么Lua中第一个返回值就是该函数的返回值。

2、在调用ref函数时,需要在ref参数处添加占位值,否则系统会自动补零。

3、在调用out函数时,不需要在out参数处添加占位值。

Lua 复制代码
--ref参数方法
local b,c = test:RefFunc(2,0,0,3)
print("调用ref函数:",b,c)

--out参数方法
local a,b,c = test:OutFunc(2,3)
print("调用out函数:",a,b,c)

--ref参数+out参数方法
local a,b,c = test:RefAndOutFunc(3)
print("调用ref和out的混合函数:",a,b,c)

调用C#委托

对于自定义委托需要添加[CSharpCallLua]标签,并重新生成代码

Lua 复制代码
local logic = function(a,b)
    local result = a+b;
    print("委托结果 加法:",result)
    return result
end

local logic1 = function(a,b)
    local result = a-b;
    print("委托结果 减法:",result)
    return result
end

--如果第一次向委托中添加函数,因为是nil,所以不能直接加,需要=
test.GetSumLogic = logic

--添加事件处理器
test.GetSumLogic = test.GetSumLogic + logic1
test.GetSumLogic(1,2)

--移除事件处理器
test.GetSumLogic = test.GetSumLogic - logic1
test.GetSumLogic(1,2)
相关推荐
大Mod_abfun2 小时前
Unity游戏基础-2(初识场景~项目构建)
游戏·unity·游戏引擎
secondyoung4 小时前
Markdown转换为Word:Pandoc模板使用指南
开发语言·经验分享·笔记·c#·编辑器·word·markdown
andyguo9 小时前
AI模型测评平台工程化实战十二讲(第五讲:大模型测评分享功能:安全、高效的结果展示与协作)
人工智能·安全·c#
大飞pkz13 小时前
【设计模式】访问者模式
开发语言·设计模式·c#·访问者模式
LateFrames18 小时前
用 【C# + Winform + MediaPipe】 实现人脸468点识别
python·c#·.net·mediapipe
爱吃小胖橘1 天前
Lua语法
开发语言·unity·lua
东方芷兰1 天前
JavaWeb 课堂笔记 —— 20 SpringBootWeb案例 配置文件
java·开发语言·笔记·算法·log4j·intellij-idea·lua
R-G-B1 天前
【14】C#实战篇——C++动态库dll 接口函数将char* strErr字符串 传给C# ,并且在winform的MessageBox和listbox中显示。C++ string 日志传给 C#
c++·c#·strerr字符串传给c#·动态库dll传递字符串给c#·string日志传给c#·c++ string传给 c#·c++底层函数日志传给c#显示
qq_205279051 天前
unity 读取PPT显示到屏幕功能
unity·游戏引擎·powerpoint
我是唐青枫1 天前
深入掌握 FluentMigrator:C#.NET 数据库迁移框架详解
数据库·c#·.net