热更学习笔记10~11----lua调用C#中的List和Dictionary、拓展类中的方法

[10]Lua脚本调用C#中的List和Dictionary

调用还是在上文中使用的C#脚本中Student类:

image-20240518221946523

lua脚本:

print("------------访问使用C#脚本中的List和Dictionary-----------")

student.list:Add(2024)
student.list:Add(5)
student.list:Add(18)
local listSize = student.list.Count
print("list长度".. tostring(listSize))

--遍历list
for i = 0,listSize - 1 do
    print("--->" .. student.list[i])
end 

print(student.list)

student.dic:Add(1,"北京")
student.dic:Add(2,"上海")
student.dic:Add(3,"广州")
student.dic:Add(4,"深圳")
--遍历dic
--使用迭代器遍历键值对
local iterDic = student.dic:GetEnumerator()
while iterDic:MoveNext() do
    local val = iterDic.Current.Value
    print("--->" .. iterDic.Current.Key .. "---".. val)
end 

--单独遍历键
local iterDicKey = student.dic.Keys:GetEnumerator()
while iterDicKey:MoveNext() do
    print("键---" .. iterDicKey.Current)
end

--遍历值
local iterDicVal = student.dic.Values:GetEnumerator()
while iterDicVal:MoveNext() do
    print("值---" .. iterDicVal.Current)
end 

----------------------在lua脚本中新增C#中的dic和list
----比较麻烦 需要新添加要增加的数据结构类型
--新增list
local list2 = System.Collections.Generic.List_int()
list2:Add(5)
list2:Add(16)
print("list2[0]" .. list2[0])
print("list2[1]" .. list2[1])

--新增加字典
local dic2 = System.Collections.Generic.Dictionary_int_string()
dic2:Add(521,"我爱你")

local iterDic2 = dic2:GetEnumerator()
while iterDic2:MoveNext() do
    local key = iterDic2.Current.Key
    local val = iterDic2.Current.Value
    print("Dic2---" .. key .. "--" .. val)
end

image-20240518221652873

CustomSetting中新增的使用的C#中的数据结构类型,就此可以体会一下lua中的userdata的数据类型!

image-20240518222011050

[11]Lua中调用C#类中的拓展方法

在lua中调用Student类的拓展方法

--调用拓展类中的方法
local Jack = TestScripts.Student("Jack")
--调用拓展方法 . 调用需要传一个自身引用
Jack.SingSunny(self)
--或者 使用 :调用 
Jack:SingSunny() 

所调用的C#脚本中的类:

 public static class Tools
 {
     public static void SingSunny(this Student student)
     {
         Debug.Log("我在唱周董的晴天!");
     }
 }
public class Student
{
    private string _name;

    public Student(string name)
    {
        _name = name;
    }

    public void Speak()
    {
        Debug.Log("my name is " + _name);
    }
    //+ 新增数组内容
    public int[] array = new int[5] { 1, 2, 3, 4, 5 };

    public List<int> list = new List<int>() { 6, 7, 8, 9, 10 };

    public Dictionary<int, string> dic = new Dictionary<int, string>();

}

CustomSetting中将拓展类Tools和被拓展的类Student相关联:

image-20240518225846467

调用结果打印:

image-20240518230124339

posted @ 2024-05-18 23:03  畅知  阅读(112)  评论(0编辑  收藏  举报