工作中有时候需要改C#,而不巧的是这个C#没有导Wrap,而外网又不能更新CS,这时候可以使用lua反射去解决。
require 'tolua.reflection'
tolua.loadassembly('Assembly-CSharp')
--上面两步加载反射环境,必须的
--创建实例
local AirTestManager = typeof('AirTestManager');
local instance = tolua.createinstance( AirTestManager );
--获取实例中的方法,并调用
local start = tolua.getmethod( AirTestManager , "Start" );
start:Call(instance);
--获取字段
local luaType = tolua.getfield( AirTestManager , "m_type" );
local type = luaType:Get(instance);
--设置字段
luaType:Set(instance , 10 );
--数字转枚举
local EnumTo = System.Enum.ToObject;
EnumTo(typeof("EHardControlType"), 1 << 12)
其他还有
tolua.findtype
tolua.getconstructor
tolua.gettypemethod
tolua.getproperty