找回密码
 立即注册
查看: 327|回复: 0

lua如何调用C#泛型方法

[复制链接]
发表于 2022-1-9 11:54 | 显示全部楼层 |阅读模式
一、具有泛型为参数的方法

  • C#调用方法
public class LuaCallCshap : MonoBehaviour
{
    LuaEnv env = null;
    void Start()
    {
        env = new LuaEnv();
        env.DoString("require 'LuaCallCsharp'");
    }

    private void OnDestroy()
    {
        env.Dispose();
    }
}

  • C#方法定义
public class IsInvokedClass
{
    //定义一个具有泛型为参数的方法
    public void Method(List<string> strArray)
    {
        foreach (var item in strArray)
        {
            Debug.Log(item);
        }
    }
}

  • Lua代码
local IsInvoked = CS.IsInvokedClass
local classObj=IsInvoked()--自动调用父类和子类的构造函数

--lua中可以直接调用具有泛型为参数的方法
myTable={"lua","C#","C++"}

classObj:Method(myTable)二、Lua中调用C#中的泛型方法

  • C#代码
[XLua.LuaCallCSharp]
public class IsInvokedClass
{
    //定义一个泛型方法
    public T Method<T>(T num1, T num2) where T:IComparable
    {
        if (num1.CompareTo(num2)<0)
        {
            return num2;
        }
        else
        {
            return num1;
        }
    }

}

  • C#扩展代码
/// <summary>
/// 扩展方法类
/// A.扩展方法类,必须是静态类
/// B.定义的扩展方法的参数,第一个参数必须是this,然后跟需要扩展的类名称全称
/// </summary>
[XLua.LuaCallCSharp]
public static class Env_IsInvokedClass
{
    /// <summary>
    /// 定义扩展方法
    /// </summary>
    /// <param name="isi"></param>
    /// <param name="num1"></param>
    /// <param name="num2"></param>
    /// <returns></returns>
    public static int ExtGetMax(this IsInvokedClass isi,int num1,int num2)
    {
        if (num1<num2)
        {
            return num2;
        }
        else
        {
            return num1;
        }
    }
}

  • Lua代码
local IsInvoked = CS.IsInvokedClass
local classObj=IsInvoked()--自动调用父类和子类的构造函数

--lua中可以直接调用泛型方法
--在lua中通过调用“扩展方法”,来间接调用泛型方法
local maxNum=CS.IsInvokedClass():ExtGetMax(45,67)
print("在lua中扩展方法调用maxNum="..maxNum)
<hr/>提取码:c7o0
提取码:dhhc
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-15 20:57 , Processed in 0.159378 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表