Lesson6_Lua调用C#_调用C#的重载函数
-调用C#的重载的函数
local obj = CS.Lesson6()
//Lesson6声明如下
public class Lesson6
{
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;
}
}
print(obj:Calc())
print(obj:Calc(15,1))--lua本身的func不支持重载,但是由于调用的是c#的,所以没问题
print(obj:Calc(10))
print(obj:Calc(10.2))--这里会打印出0,而非10.2
--因为lua中的数值只有number,而c#有许多精度
--所以对多精度的重载会有问题,比如一个函数需要传入int,一个函数传入float
--那么这里float函数调用就会有问题
--xlua提供了解决方法,用了反射机制,但效率低
local m1= typeof(CS.Lesson6):GetMethod("Calc",{typeof(CS.System.Int32)}) --得到名为Calc,参数为一个int的函数
local m2 = typeof(CS.Lesson6):GetMethod("Calc",{typeof(CS.System.Single)}) --得到名为Calc,参数为一个float的函数
--通过xlua提供的方法把C#的函数信息转换为lua的函数使用,一般转换一次然后重复使用
local f1 = xlua.tofunction(m1)
local f2 = xlua.tofunction(m2)
print(f1(obj,10)) --因为是个成员函数,第一个参数要填调用者(相当于使用了.调用,然后传入self充当一次:调用),这里填入上面的obj,代表从obj调用该函数
print(f2(obj,10.2))

浙公网安备 33010602011771号