C#和LuaInterface:如何在Lua中将表项添加到C#对象中

我在MonoDevelop中使用SharpLua。我在C#端创建了一个类,希望能够从Lua中使用。这很简单,我可以从Lua中访问所有字段。

public class Test {
  public string Name;
}

可以通过以下方式从Lua访问

print(test.Name)

现在,我想通过Lua创建新的字段。在Lua中,它应该如下所示

test.abc = "A string"
print(test.abc)

但这没有起作用。我在ObjectTranslator中收到错误。因此,我无法从Lua扩展表。我不想从C#中访问这些新条目。只需创建它们即可。

还有其他方法可以实现这一点吗?我能否从LuaTable创建一个类并将其插入到Lua中?

lua["NewLuaTable"] = new ClassFromLuaTable;

然后在Lua中使用

NewLuaTable.abc = "A string"
print(NewLuaTable.abc);

但是,那么,我如何得到通知,我想知道的内容已更改在LuaTable中(NewLuaTable.Name已更改)?

谢谢你的帮助。

点赞
用户1829325
用户1829325

将下面翻译成中文并且保留原本的 markdown 格式

好了,我自己找到了。

你可以使用 get_Item()set_Item() 函数在 Lua 中扩展 C# 类。这两个函数与 Lua 元表中的 __index__newindex 函数相同。因此,您可以在 C# 中创建一个 Dictionary 表,并在 set_Item() 函数中填充它。如果 LuaInterface 在类中找不到条目,它会调用 get_Item() 函数查看能否通过这种方式获取该值。在这里,您可以查看您的表是否为有效的键值对。

2012-12-28 16:27:55