1. 程式人生 > 實用技巧 >Unity熱更新04-XLua呼叫C#-06-Lua呼叫C# 過載方法

Unity熱更新04-XLua呼叫C#-06-Lua呼叫C# 過載方法

print("*********Lua呼叫C# 過載函式相關知識點***********")

local obj = CS.Lesson6()

--雖然Lua自己不支援寫過載函式
--但是Lua支援呼叫C#中的過載函式  
print(obj:Calc())
print(obj:Calc(15, 1))

--Lua雖然支援呼叫C#過載函式
--但是因為Lua中的數值型別 只有Number
--對C#中多精度的過載函式支援不好 傻傻分不清
--在使用時 可能出現意想不到的問題
print(obj:Calc(10))
print(obj:Calc(10.2))


--解決過載函式含糊的問題
--xlua提供瞭解決方案 反射機制 
--這種方法只做瞭解 儘量別用
--Type是反射的關鍵類
--得到指定函式的相關資訊
local m1 = typeof(CS.Lesson6):GetMethod("Calc", {typeof(CS.System.Int32)})
local m2 = typeof(CS.Lesson6):GetMethod("Calc", {typeof(CS.System.Single)})

--通過xlua提供的一個方法 把它轉成lua函式來使用
--一般我們轉一次 然後重複使用
local f1 = xlua.tofunction(m1)
local f2 = xlua.tofunction(m2)
--成員方法 第一個引數傳物件
--靜態方法 不用傳物件
print(f1(obj, 10))
print(f2(obj, 10.2))