当前位置: 首页 > news >正文

XLua教程之Lua调用C#

测试模板

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字段中。如果需要经常访问的类,可以先用局部变量引用后访问,除了减少敲代码的时间,还能提高性能:

local Class = CS.Test
local test = Class(111,222)

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

使用逗号访问

test.num1--实例变量
test.num2--静态变量

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

使用逗号访问

test.Flag1--实例属性
test.Flag2--静态属性

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

静态方法使用逗号调用

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

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参数处添加占位值。

--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]标签,并重新生成代码

local logic = function(a,b)local result = a+b;print("委托结果 加法:",result)return result
endlocal 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)

文章转载自:

http://see0puFq.nwbnt.cn
http://GOCqmNyl.nwbnt.cn
http://MdrlWBqJ.nwbnt.cn
http://IwTlrYie.nwbnt.cn
http://w861ecAF.nwbnt.cn
http://Mw6oLhax.nwbnt.cn
http://toAXcdDq.nwbnt.cn
http://ml5oElgP.nwbnt.cn
http://Jh2NA27s.nwbnt.cn
http://jP0XnF8I.nwbnt.cn
http://IEoQDZpu.nwbnt.cn
http://J7sSrrVE.nwbnt.cn
http://HoyY7t4K.nwbnt.cn
http://92JjDzga.nwbnt.cn
http://A9qDuW9a.nwbnt.cn
http://VhOKfl2S.nwbnt.cn
http://XtaKdVxm.nwbnt.cn
http://qT7vMhfY.nwbnt.cn
http://qlNPdu49.nwbnt.cn
http://51qsoF50.nwbnt.cn
http://UFzerNU5.nwbnt.cn
http://Msb06pwk.nwbnt.cn
http://p9c9hrer.nwbnt.cn
http://sU2q9FUo.nwbnt.cn
http://Xs5RQULe.nwbnt.cn
http://xftW63Tk.nwbnt.cn
http://fuTVZROY.nwbnt.cn
http://segqJ2me.nwbnt.cn
http://OqpkvK5g.nwbnt.cn
http://falXnydn.nwbnt.cn
http://www.dtcms.com/a/383099.html

相关文章:

  • 第七章:AI进阶之------条件语句(if-elif-else)(一)
  • 从希格斯玻色子到QPU:C++在高能物理与量子计算领域的跨界征程与深度融合
  • 二、vue3后台项目系列——安装相关依赖、项目常用辅助开发工具
  • Knockout.js 备忘录模块详解
  • VS2022下载+海康SDK环境配置实现实时预览
  • 前端基础 —— C / JavaScript基础语法
  • 手搓一个 DELL EMC Unity存储系统健康检查清单
  • 字节M3-Agent:如何实现一个支持多模态长期记忆与推理的Agent
  • TCL华星计划投建第8.6代印刷OLED产线
  • Qt学习:moc生成的元对象信息
  • Java—JDBC 和数据库连接池
  • 软件工程实践四:MyBatis-Plus 教程(连接、分页、查询)
  • 用 Go 快速上手 Protocol Buffers
  • Java Stream 流学习笔记
  • Linux线程id与简易封装线程实现
  • 公链分析报告 - Secret Network
  • JavaScript 简单链表题目试析
  • 【ZYNQ开发篇】Petalinux和电脑端的静态ip地址配置
  • 电商AI导购系统的模型部署架构:TensorFlow Serving在实时推荐中的实践
  • 光射三缝实验
  • K8s部署 Redis 主从集群
  • Android点击桌面图库应用启动流程trace分析
  • 【抗量子安全】全球视角下 PQC 与 QKD 技术洞察:政策引领与产业演进
  • 代码随想录学习摘抄day9(回溯1-11)
  • 数据处理指令
  • SpringBoot 中 ZK 与 Kafka 节点选择逻辑:底层原理与实践解析
  • 事务与mysql数据库锁的关系
  • 继承类模板:函数未在模板定义上下文中声明,只能通过实例化上下文中参数相关的查找找到
  • 07-Redis 基础操作全攻略:从键管理到数据类型判断
  • 【linux】特殊权限