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