/// <summary>
        /// GameEventArgs 事件释放
        /// </summary>
        /// <param name="self"></param>
        /// <param name="handle"></param>
        /// <typeparam name="T"></typeparam>
        public static void GameEventUnsubscribe <T>(this EventComponent self, EventHandler <GameEventArgs> handle) where T : GameEventArgs, new()
        {
            var args = ReferencePool.Acquire <T>();

            self.Unsubscribe(args.Id, handle);

            ReferencePool.Release(args);
        }
        /// <summary>
        /// GameEventArgs 事件释放
        /// </summary>
        /// <param name="self"></param>
        /// <param name="gameEventArgsType"></param>
        /// <param name="handle"></param>
        /// <exception cref="GameFrameworkException"></exception>
        public static void GameEventUnsubscribe(this EventComponent self, Type gameEventArgsType, EventHandler <GameEventArgs> handle)
        {
            if (!typeof(GameEventArgs).IsAssignableFrom(gameEventArgsType))
            {
                throw new GameFrameworkException($"gameEventArgsType 不是 {typeof(GameEventArgs)} 类型");
            }

            var args = (GameEventArgs)ReferencePool.Acquire(gameEventArgsType);

            self.Unsubscribe(args.Id, handle);

            ReferencePool.Release(args);
        }
        /// <summary>
        /// GameEventArgs 事件释放
        /// </summary>
        /// <param name="self"></param>
        /// <param name="gameEventArgsType"></param>
        /// <param name="handle"></param>
        /// <exception cref="GameFrameworkException"></exception>
        public static void GameEventUnsubscribe(this EventComponent self, Type gameEventArgsType, EventHandler <GameEventArgs> handle)
        {
            if (!typeof(GameEventArgs).IsAssignableFrom(gameEventArgsType))
            {
                throw new GameFrameworkException($"gameEventArgsType 不是 {typeof(GameEventArgs)} 类型");
            }

            var args = (GameEventArgs)ReferencePool.Acquire(gameEventArgsType);


            if (self.Check(args.Id, handle))
            {
                self.Unsubscribe(args.Id, handle);
            }
            else
            {
                GameFrameworkLog.Warning($"事件ID:{args.Id},已经被释放了,无法再次释放.");
            }

            ReferencePool.Release(args);
        }