|
1、XLua强制类型转换
cast(data,type)
第一个参数是需要强转的对象,第二个参数是目标类型
例如:有一个对象_resData需要强转为C#类型ResourceData。- local _resdata=_data
- cast(_resdata, typeof(CS.MapTileResourceData))
复制代码 原因: xlua.cast实现了改功能,LuaEnv.cs文件中初始化了cast 2、XLua调用带泛型函数(通过提供的xlua.get_generic_method方法调用。)
创建一个带泛型的Test函数。- //测试类
- public class Test
- {
- private int a = 100;
- //泛型方法
- public int GenericMethodTest<T>(T t)
- {
- Debug.Log(t);
- Debug.Log(typeof(T));
- return a;
- }
- }
复制代码 XLua中代码如下:- //实例化Test类
- local test=CS.Test.Test()
- //取得泛型方法 CS.Test为命名空间
- local testGenericFunc=xlua.get_generic_method(CS.Test.Test,"GenericMethodTest")
- //为泛型方法指定类型
- local realFunc=testGenericFunc(typeof(CS.System.Int32))
-
- //调用 若泛型方法为静态,则无需传第一个实例参数
- realFunc(test,5)
复制代码- local YKApplication_Ins = CS.YoukiaUnity.App.YKApplication.Instance
- local _SceneManagers = xlua.get_generic_method(CS.YoukiaUnity.App.YKApplication, "GetManager")
- local _temp = _SceneManagers(CS.YoukiaUnity.Scene.SceneManager)
- local _SceneManager =_temp(YKApplication_Ins)
复制代码 引用:XLua学习
https://github.com/Tencent/xLua/commit/fa1b6d85557a525c920bef75dda91da6e8e99454
3、值类型强转
原因:Xlua的C#代码中找到一个类RawObject.cs,实现了几个强转的函数。- CS.XLua.Cast.Int32(_finalDamage)
复制代码 4、Xlua重写C#的属性
直接重写get_XXX(),或set_XXX()方法。
C# 中属性的本质,编译成中间语言后是 get、set 两个方法,调用属性实际上是调用 get 或 set 方法。get 对应名为“get_属性名”的方法,set 对应名为“set_属性名"的方法。
5、带有ref out 参数的函数
函数返回值返回 ref out的值。 |
|