【XLua】009-C#访问Lua中的table:映射到interface

【XLua】009-C#访问Lua中的table:映射到interface_第1张图片

xLua的table映射到interface

  • 1.Lua脚本的书写,table中包含了函数的声明
person={
name="fex",age="22",12,12,13,
eat=function(self,a,b)   --声明方法1:self为该表自身的参数,类似C#中this
    print(a+b)
    print("我吃了")
end

}
--[[
--声明方法2:
function person:eat(a,b)
    print(a+b)
end

--声明方法3:
function person.eat(self,a,b)
    print(a+b)
end
--]]
  • 2.C#中通过interface访问table
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;

public class _004_CsharpCallLua : MonoBehaviour
{

    private LuaEnv env;

    void Start()
    {
        env = new LuaEnv();

        env.DoString("require 'CSharpCallLua'");

        IPerson p = env.Global.Get("person");
        print(p.name);
        print(p.age);

        p.name = "hello fex";
        env.DoString("print(person.name)");//interface是引用类型,可以修改lua中的值。

        p.eat(10, 10);

    }

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


    [CSharpCallLua]  //必须打上此标签
    interface IPerson
    {
        string name { get; set; }
        int age { get; set; }
        void eat(int a, int b);
    }
}

输出结果:


【XLua】009-C#访问Lua中的table:映射到interface_第2张图片
img.jpg

注意:

1.在C#中声明interface来映射table时,要记住在接口上方打上标签[CSharpCallLua]。

2.在table中直接声明方法时,方法的第一个参数默认是自身,可以声明为self,当然也可以是其他名称。

同时上面Lua脚本中还举例书写了另外两种书写table中函数的方法。

3.C#通过interface访问Lua中table时是传递的引用类型,与通过class方法中的值拷贝不同,这里可以在C#修改值,同时Lua中的值也会发生改变。

4.如果要输出中文字符,要确保Lua脚本时utf-8的编码格式,避免乱码显示中文。

你可能感兴趣的:(【XLua】009-C#访问Lua中的table:映射到interface)