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))

你可能感兴趣的:(Lua相关,lua,游戏开发,unity3d)