17.Lua调用CSharp-重载函数
17.1 知识点
准备工作
启动Lua脚本
LuaManager.Instance.Init();
LuaManager.Instance.DoLuaFile("Lesson17_Lua调用CSharp_重载函数");
定义有重载函数的测试类
public class Lesson17_Test
{
public int OverloadFunction()
{
return 100;
}
public int OverloadFunction(int a)
{
return a;
}
public int OverloadFunction(int a, int b)
{
return a + b;
}
public float OverloadFunction(float a)
{
return a;
}
}
在Lua脚本实例化
local test = CS.Lesson17_Test()
直接调用重载函数
调用重载函数
--虽然Lua不支持重载函数 但是Lua支持调用C#中的重载函数
print(test:OverloadFunction())--100
print(test:OverloadFunction(100, 100))--200
--虽然Lua支持调用C#重载函数 但是由于Lua中的数值类型只有Number 导致Lua对C#中多精度的重载函数支持可能会出现问题
print(test:OverloadFunction(10))--100
print(test:OverloadFunction(10.2))--0
反射调用重载函数
使用反射调用重载函数
--xlua提供了反射机制 可以用来调用重载函数 解决Lua对C#中多精度的重载函数不准确的问题
--反射调用方法只做了解 非必须的情况下不要使用 可能会对性能有影响
--反射得到C#方法
-- local C#方法 = typeof(CS.类名):GetMethod("方法", {typeof(CS.参数类型)})
local CSharpOverloadMethod1 = typeof(CS.Lesson17_Test):GetMethod("OverloadFunction", {typeof(CS.System.Int32)})
local CSharpOverloadMethod2 = typeof(CS.Lesson17_Test):GetMethod("OverloadFunction", {typeof(CS.System.Single)})--Single代表float
--xlua的tofunction方法 把反射得到C#方法转成lua函数来使用
local LuaOverloadMethod1 = xlua.tofunction(CSharpOverloadMethod1)
local LuaOverloadMethod2 = xlua.tofunction(CSharpOverloadMethod2)
--如果得到的是成员方法 第一个参数传对象
--如果得到的是静态方法 不用传对象
print(LuaOverloadMethod1(test, 10))--10
print(LuaOverloadMethod2(test, 10.2))--10.199999809265 转换存在精度问题 但是属于正常调用重载函数
17.2 知识点代码
Lesson17_Lua调用CSharp_重载函数.lua
print('我是Lua脚本 Lesson17_Lua调用CSharp_重载函数')
local test = CS.Lesson17_Test()
print("**********知识点一 直接调用重载函数************")
--虽然Lua不支持重载函数 但是Lua支持调用C#中的重载函数
print(test:OverloadFunction())--100
print(test:OverloadFunction(100, 100))--200
--虽然Lua支持调用C#重载函数 但是由于Lua中的数值类型只有Number 导致Lua对C#中多精度的重载函数支持可能会出现问题
print(test:OverloadFunction(10))--100
print(test:OverloadFunction(10.2))--0
print("**********知识点二 反射调用重载函数************")
--xlua提供了反射机制 可以用来调用重载函数 解决Lua对C#中多精度的重载函数不准确的问题
--反射调用方法只做了解 非必须的情况下不要使用 可能会对性能有影响
--反射得到C#方法
-- local C#方法 = typeof(CS.类名):GetMethod("方法", {typeof(CS.参数类型)})
local CSharpOverloadMethod1 = typeof(CS.Lesson17_Test):GetMethod("OverloadFunction", {typeof(CS.System.Int32)})
local CSharpOverloadMethod2 = typeof(CS.Lesson17_Test):GetMethod("OverloadFunction", {typeof(CS.System.Single)})--Single代表float
--xlua的tofunction方法 把反射得到C#方法转成lua函数来使用
local LuaOverloadMethod1 = xlua.tofunction(CSharpOverloadMethod1)
local LuaOverloadMethod2 = xlua.tofunction(CSharpOverloadMethod2)
--如果得到的是成员方法 第一个参数传对象
--如果得到的是静态方法 不用传对象
print(LuaOverloadMethod1(test, 10))--10
print(LuaOverloadMethod2(test, 10.2))--10.199999809265 转换存在精度问题 但是属于正常调用重载函数
Lesson17_Lua调用CSharp_重载函数
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson17_Lua调用CSharp_重载函数 : MonoBehaviour
{
void Start()
{
LuaManager.Instance.Init();
LuaManager.Instance.DoLuaFile("Lesson17_Lua调用CSharp_重载函数");
}
}
public class Lesson17_Test
{
public int OverloadFunction()
{
return 100;
}
public int OverloadFunction(int a)
{
return a;
}
public int OverloadFunction(int a, int b)
{
return a + b;
}
public float OverloadFunction(float a)
{
return a;
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com