2012-04-08 129 views
0

我使用LuaInterface为我想在Lua中提供的某些对象注册getter。 E.G:LuaInterface:访问对象属性

public MyObject getObjAt(int index) 
    { 
     return _myObjects[index]; 
    } 

我的Lua文件:

obj = getObjAt(3) 
print(obj.someProperty) // Prints "someProperty" 
print(obj.moooo)   // Prints "moooo" 
print(obj:someMethod()) // Works fine, method is being executed 

究竟如何,我可以在Lua回国后,他们访问公共对象属性?这甚至可能或者我必须为每个对象属性编写getter?

回答

0

您可能会发现这个代码在了解了如何访问属性的有用:

class Lister 
{ 
    public string ListObjectMembers(Object o) 
    { 
     var result = new StringBuilder(); 
     ProxyType proxy = o as ProxyType; 

     Type type = proxy != null ? proxy.UnderlyingSystemType : o.GetType(); 

     result.AppendLine("Type: " + type); 

     result.AppendLine("Properties:"); 
     foreach (PropertyInfo propertyInfo in type.GetProperties()) 
      result.AppendLine(" " + propertyInfo.Name); 

     result.AppendLine("Methods:"); 
     foreach (MethodInfo methodInfo in type.GetMethods()) 
      result.AppendLine(" " + methodInfo.Name); 


     return result.ToString(); 
    } 
} 

和注册功能:

static Lister _lister = new Lister(); 
private static void Main() { 
    Interpreter = new Lua(); 

    Interpreter.RegisterFunction("dump", _lister, 
    _lister.GetType().GetMethod("ListObjectMembers")); 
} 

然后在Lua:

print(dump(getObjAt(3)))