Exemple #1
0
        static void Main(string[] args)
        {
            //建立委托链
            var cb = new CallBack(CallBackAdd1);

            cb += CallBackAdd2;
            cb += CallBackAdd3;
            cb += CallBackAdd4;
            cb += CallBackAdd5;

            var sum = cb(0);

            //只会收到最后一个含有返回值的委托的返回值,前面的都白做了,输出错误答案5
            Console.WriteLine(sum);

            //通过GetInvocationList方法得到委托链上的所有方法
            var list = cb.GetInvocationList();
            var i    = 0;

            foreach (var del in list)
            {
                //显式呼叫方法
                //静态方法不需要object
                i = (int)del.Method.Invoke(null, new object[] { i });
            }

            //正确答案15
            Console.WriteLine(i);
            Console.ReadKey();
        }
        /// <summary> 入口方法: 注册获取 </summary>
        public void Register(int index = 0)
        {
            this._callBackHandle += Report;

            bool isRegistered = _callBackHandle == null ? false : _callBackHandle.GetInvocationList().ToList().Exists(l => l.Method.Name == "Report");

            if (!isRegistered)
            {
                this._callBackHandle += Report;
            }


            EnumWindows(_callBackHandle, index);
        }