public static Delegate CreateDelegate(Type t, LuaFunction func, LuaTable self) { DelegateValue Create = null; if (!dict.TryGetValue(t, out Create)) { throw new LuaException(string.Format("Delegate {0} not register", LuaMisc.GetTypeName(t))); } if (func != null) { GLuaState state = func.GetGLuaState(); LuaDelegate target = state.GetLuaDelegate(func, self); if (target != null) { return(Delegate.CreateDelegate(t, target, target.method)); } else { Delegate d = Create(func, self, true); target = d.Target as LuaDelegate; state.AddLuaDelegate(target, func, self); return(d); } } return(Create(func, self, true)); }