lua调用c#之Lua使用C#重载函数

c#代码

#region 函数重载
public class CallFun
{
    public int Calc()
    {
        return 100;
    }

    public int Calc(int a,int b)
    {
        return a + b;
    }

    public int Calc(int a)
    {
        return a;
    }

    public float Calc(float a)
    {
        return a;
    }
}
#endregion

lua代码

CallFun=CS.CallFun
local cf=CallFun()

--[[
	虽然lua自己不支持写重载函数
	但是lua支持调用c#中的重载函数
	lua虽然支持调用c#中的重载函数
	但是因为lua中只有number的数值类型
	对c#中多精度的重载函数支持不好,分不清
	在使用时,尽量避免c#中出现不同精度的重载函数,尽量避免多精度的重载函数
	不过xlua也有解决方案,是用反射机制,但是尽量别用,效率低

]]
print(cf:Calc())
print(cf:Calc(10,30))
print(cf:Calc(19))
print(cf:Calc(19.3))

--[[
 要解决重载函数精度不同的问题,xlua提供了反射机制
 

]]
--type是反射的关键类
--得到指定函数的相关信息
local m1=typeof(CallFun):GetMethod("Calc",{typeof(CS.System.Int32)})
local m2=typeof(CallFun):GetMethod("Calc",{typeof(CS.System.Single)})
--通过xlua提供的一个方法 把它转成lua函数来使用
--一般转一次然后重复使用
local f1=xlua.tofunction(m1)
local f2=xlua.tofunction(m2)
print(f1(cf,10))
print(f2(cf,10.3))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值