委托揭秘

public delegate void Feedback(object value,Int32 item,Int32 numItems);

当编译器遇到这段代码时,它会产生如下面所示的一个完整的类定义

public class Feedback : MulticastDelegate

    {

        public Feedback(object target, Int32 methodPro);

        public virtual void Invoke(object value,Int32 item,Int32 numItems)//伪代码

        {

             //如果链表上包含有任何应该被首先调用的

            //委托,那么将对他们进行递归调用

            if(_prev!=null)

            {

                _prev.Invoke(value,item,numItems);

            }

            //在指定的目标对象上调用回调方法

            _target.methodPrt(value,item,numItems);

        }

        public virtual IAsyncResult BeginInvoke(object value, Int32 item, Int32 numItems, AsyncCallback callback, object object1);

        public virtual void EndInvoke(IAsyncResult result);

    }

所以委托可以定义类中,也可以定义一个全局的范围内,因为委托本身就是类


    feedback(object value,Int32 item,Int32 numItems);

    相当于feedback.Invoke(object value,Int32 item,Int32 numItems);

 

    MulticastDelegate又继承Delegate Delegate有两个参数Target和Method

    Target属性返回一个方法回调时操作的对象引用。

    Method 属性返回一个标识回调方法的System.Reflection.MethodInfo;

posted @ 2010-10-23 12:58  gull  Views(353)  Comments(0Edit  收藏  举报