Lesson12_Lua调用C#_调用泛型的函数

--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)
posted @ 2024-02-29 21:56  波奇型蠢驴  阅读(6)  评论(0)    收藏  举报