Lua 一些小知识(二)

本文详细介绍Lua与C#的交互方式,包括Lua如何访问C#的属性与方法、C#如何执行Lua脚本、注册C#方法为Lua全局函数等。此外还介绍了特殊情况下Lua如何处理C#中的out与ref参数,以及如何注册C#事件委托。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1)Lua中访问C#中的属性跟方法
require "luanet"
luanet.load_assembly("System")
Int32 = luanet.import_type("System.Int32")
num=Int32.Parse(1234)--call the method in csharpClass
print("Num is",num)

print(Int32)


2)在C#中执行Lua脚本文件,或者脚本字符串

在C#中编写Lua脚本:

 lua解释器:

     Lua  lua=new Lua();

声明变量:

     lua.DoString(str="siki是个傻孩子");

 

注:在C#中可以使用return返回lua中的值

例:

   lua.DoString(return str)//str是lua中的一个变量名

 

执行文件:

     lua.DoFile(Lua文件名.lua)

注:Lua语言的编码格式是ANSI否则在C#中会出错

3)    把一个C#方法注册进Lua的一个全局方法

把一个C#方法注册进Lua中:
普通方法:
    lua.RegisterFunction("在lua中显示的方法名",注册的对象,注册的对象的方法)

例:

lua.RegisterFunction("LuaFunction",obj,obj.GetType().GetMethod("注册的方法名"))

()");

静态方法:
   lua.RegisterFunction("在lua中显示的方法名",null,typeof(静态对象).GetMethod("静态方法名"))
例:
lua.RegisterFunction("LuaStaticFunction",null,typeof(MyClass).GetMethod("注册的静态方法名")
()");

4)在Lua中使用C#代码:

   require:   // 引入C#中的动态链接库


注:luanet要放在C#工程的输出目录下

5)在Lua中访问C#的属性跟方法

Lua代码中,访问C#对象的属性的方式和访问table的键索引一样,比如obj.name 或者 obj["name"]

 Lua代码中,访问C#对象的普通函数的方式和调用table的函数一样,比如obj:method1()

注:特殊情况---Lua中访问C#中的方法  特殊情况

当函数中有out或ref参数时,out参数和ref参数和函数的返回值一起返回,并且调用的时候,out参数不需要传入
C#函数定义
class Obj{
int OutMethod1(int parameter1,out parameter2,out parameter3){
parameter2=34;parameter3=213;
return parameter1;
}
int OutMethod2(int parameter1,ref parameter2){
parameter2=parameter2+2;
return parameter1+parameter2;
}

}

当有重载函数的时候,调用函数会自动匹配第一个能匹配的函数
可以使用get_method_bysig函数得到C#中指定类的指定参数的函数用法

luaMethod = get_method_bysig(Obj,"CSharpMethod","System.String")

luaMethod("ABC")

6)Lua注册C#中事件委托(event delegate)

在Lua中通过Add方法或者Remove方法把一个Lua的函数注册或者注销从C#中的事件委托中

function method()

end

obj.SomeEvent:Add(methodname(不用带引号))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值