UH2S2L20——Lua调用泛型函数
UH2S2L20——Lua调用泛型函数
本章代码关键字
1 | xlua.get_generic_method() --通过类与方法名获取方法信息,之后传入泛型参数即可构建可用的方法,在调用方法既可所有泛型函数 |
调用泛型函数
- Lua只有有约束有参数(且约束必须是
class
)的泛型函数才能调用 - 其他情况,需要使用
xlua.get_generic_method()
获取方法信息,再传入类型,得到可用的函数,即可调用(IL2CPP打包下存在限制)
先在C#脚本内声明如下内容
1 | public class Lesson12 |
有参数有约束的泛型方法
虽然Lua不支持传入泛型参数,但是对于有参数有约束的泛型方法支持直接传入参数并执行的
1 | local obj = CS.Lesson12() |
有参数无约束的泛型方法
Lua不支持有参数无约束的泛型方法
1 | -- obj:TestFun2(child) |
无参数有约束的泛型方法
Lua不支持无参数有约束的泛型方法
1 | -- obj:TestFun3() |
有参数有约束,但是约束不是类的泛型方法
Lua不支持约束不是class
的泛型方法
1 | -- obj:TestFun4(child) |
通过特定方法使不可用的泛型方法可用
首先需要得到通用函数,设置泛型的类型再使用
如果反射的是成员方法,则第一个参数需要传入调用函数的对象
如果反射的是静态方法,则第一个参数不需要传入调用函数的对象
1 | -- 得到方法信息 |
该方法存在局限性,不是在所有的情况下都可以用,有一定的使用限制,
原因可见:CS5L3——Unity跨平台的基本原理之IL2CPP,IL2CPP打包存在的问题
- Mono打包,这种方式支持使用
- il2cpp打包,如果泛型参数是引用类型才可以使用
il2cpp打包,如果泛型参数是值类型,除非C#那边已经调用过了 同类型的泛型参数 lua中才能够被使用
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!