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

posted @ 2024-02-29 12:52  波奇型蠢驴  阅读(13)  评论(0)    收藏  举报