--lua调用C#的泛型函数
local obj = CS.Lesson12()
local child = CS.Lesson12.TestChild()
local father =CS.Lesson12.TestFather()
Lesson12的声明
public class Lesson12
{
public interface ITest
{
}
public class TestFather
{
}
public class TestChild : TestFather,ITest
{
}
public void TestFun1(T a,T b) where T:TestFather
{
Debug.Log("有参数有约束的泛型方法");
}
public void TestFun2(T a,T b)
{
Debug.Log("有参数没约束的泛型方法");
}
public void TestFun3() where T : TestFather
{
Debug.Log("没参数有约束的泛型方法");
}
public void TestFun4(T a)where T:ITest
{
Debug.Log("有约束有参数约束不为Class");
}
}
obj:TestFun1(child,father)--可以调用有约束有参数的泛型
obj:TestFun2(child) --不支持没有约束的泛型
obj:TestFun3() --不支持有约束,没有参数的泛型函数
obj:TestFun4(child) --不支持有参数有约束,但约束不是Class类型的泛型函数
--xlua可以全部支持,但是性能不佳,且有使用限制
--打包采取mono可以使用,但如果打包使用IL2Cpp,只有当泛型参数是引用类型才能使用,如果是值类型,那只有当C#那方已经用过一次该值类型的泛型函数才能在lua被使用
--获取函数
local testFun2 = xlua.get_generic_method(CS.Lesson12,"TestFun2")
--设置泛型类型,返回设置好泛型的函数
local testFun2_R =testFun2(CS.System.Int32)
--调用是一个成员函数,第一个参数要传调用者
testFun2_R(obj,1)