コード例 #1
0
        /// <summary>
        /// 指定のオブジェクトをイベントを登録します。
        /// イベントはHandle属性を利用して設定します。
        /// 解除する場合は、返り値のオブジェクトを解放してください。
        /// </summary>
        public EventHandle Bind(object handler)
        {
            if (Disposed)
            {
                return(new EventHandle());
            }
            Log.Debug("[ilib-event] Bind {0}", handler);
            EventHandle handle = new EventHandle();
            var         entry  = HandleEntry.Get(handler.GetType());

            foreach (var kvp in entry.Methods)
            {
                var      key       = kvp.Key;
                var      method    = kvp.Value;
                var      parameter = entry.Parameters[key];
                PathBase path      = null;
                var      type      = parameter?.ParameterType ?? null;
                path = new HandlePath(this, key, (obj) => entry.Invoke(handler, key, obj), type, handle);
                handle.Add(path);
                m_Paths.Add(path);
            }
            return(handle);
        }
コード例 #2
0
 internal HandlePath(EventCall call, string key, Func <object, bool> func, Type type, EventHandle handle) : base(call, key)
 {
     Type     = type;
     m_Func   = func;
     m_Handle = handle;
 }