UH2S2L16——Lua调用重载函数
UH2S2L16——Lua调用重载函数
本章代码关键字
1 | typeof(CS.类名):GetMethod(方法名, {参数列表}) --反射获取类的方法信息,通过xlua的方法可以转化为函数 |
调用重载函数
先在C#脚本内声明如下内容
1 | public class Lesson6 |
虽然Lua自己不支持写重载函数,但是Lua支持调用C#中的重载函数
1 | local obj = CS.Lesson6() |
Lua虽然支持调用C#重载函数,但是因为Lua中的数值类型,只有Number
因此对C#中多精度的重载函数支持不好,傻傻分不清,在使用时,可能出现意想不到的问题
因此,如果要给Lua提供重载函数调用,需要尽可能避免使用整数参数和浮点数参数(或者说避免因为精度不同导致的重载)的重载
例如下面的例子,后面的语句明显传入的是浮点数10.2
,但却输出了0
1 | print(obj:Calc(10)) |
解决精度重载调用导致的问题
对于重载函数含糊的问题,xlua提供了解决方案 反射机制
这种方法只做了解,尽量别用(效率低)
Type
是反射的关键类,得到指定函数的相关信息
通过xlua提供的一个方法 把它转成lua函数来使用,一般我们转一次 然后重复使用
成员方法的第一个参数传调用的对象,静态方法不用传对象
1 | local methodInfo1 = typeof(CS.Lesson6):GetMethod("Calc", {typeof(CS.System.Int32)}) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!