static int set_onClickEvent(IntPtr L)
    {
        try
        {
            TestEventListener obj  = (TestEventListener)ToLua.CheckObject(L, 1, typeof(TestEventListener));
            EventObject       arg0 = null;

            if (LuaDLL.lua_isuserdata(L, 2) != 0)
            {
                arg0 = (EventObject)ToLua.ToObject(L, 2);
            }
            else
            {
                return(LuaDLL.luaL_throw(L, "The event 'TestEventListener.onClickEvent' can only appear on the left hand side of += or -= when used outside of the type 'TestEventListener'"));
            }

            if (arg0.op == EventOp.Add)
            {
                TestEventListener.OnClick ev = (TestEventListener.OnClick) DelegateTraits <TestEventListener.OnClick> .Create(arg0.func);

                obj.onClickEvent += ev;
            }
            else if (arg0.op == EventOp.Sub)
            {
                TestEventListener.OnClick ev = (TestEventListener.OnClick)LuaMisc.GetEventHandler(obj, typeof(TestEventListener), "onClickEvent");
                Delegate[] ds    = ev.GetInvocationList();
                LuaState   state = LuaState.Get(L);

                for (int i = 0; i < ds.Length; i++)
                {
                    ev = (TestEventListener.OnClick)ds[i];
                    LuaDelegate ld = ev.Target as LuaDelegate;

                    if (ld != null && ld.func == arg0.func)
                    {
                        obj.onClickEvent -= ev;
                        state.DelayDispose(ld.func);
                        break;
                    }
                }

                arg0.func.Dispose();
            }

            return(0);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e));
        }
    }
    private static int set_onClickEvent(IntPtr L)
    {
        int result;

        try
        {
            TestEventListener testEventListener = (TestEventListener)ToLua.CheckObject(L, 1, typeof(TestEventListener));
            if (LuaDLL.lua_isuserdata(L, 2) != 0)
            {
                EventObject eventObject = (EventObject)ToLua.ToObject(L, 2);
                if (eventObject.op == EventOp.Add)
                {
                    TestEventListener.OnClick value = (TestEventListener.OnClick)DelegateFactory.CreateDelegate(typeof(TestEventListener.OnClick), eventObject.func);
                    testEventListener.onClickEvent += value;
                }
                else if (eventObject.op == EventOp.Sub)
                {
                    TestEventListener.OnClick onClick = (TestEventListener.OnClick)LuaMisc.GetEventHandler(testEventListener, typeof(TestEventListener), "onClickEvent");
                    Delegate[] invocationList         = onClick.GetInvocationList();
                    LuaState   luaState = LuaState.Get(L);
                    for (int i = 0; i < invocationList.Length; i++)
                    {
                        onClick = (TestEventListener.OnClick)invocationList[i];
                        LuaDelegate luaDelegate = onClick.Target as LuaDelegate;
                        if (luaDelegate != null && luaDelegate.func == eventObject.func)
                        {
                            testEventListener.onClickEvent -= onClick;
                            luaState.DelayDispose(luaDelegate.func);
                            break;
                        }
                    }
                    eventObject.func.Dispose();
                }
                result = 0;
            }
            else
            {
                result = LuaDLL.luaL_throw(L, "The event 'TestEventListener.onClickEvent' can only appear on the left hand side of += or -= when used outside of the type 'TestEventListener'");
            }
        }
        catch (Exception e)
        {
            result = LuaDLL.toluaL_exception(L, e, null);
        }
        return(result);
    }