委托和事件的区别 小结

事件和委托的区别:
1.事件的声明只是在委托前面加一个event关键词,虽然你可以定义一个public,但是有了event关键词后编译器始终会把这个委托声明为private,然后添加1组add,remove方法。add对应+=,remove对应-=。这样就导致事件只能用+=,-=来绑定方法或者取消绑定方法。而委托可以用=来赋值,当然委托也是可以用+=,-=来绑定方法的

       2.委托可以在外部被其他对象调用,而且可以有返回值(返回最后一个注册方法的返回值)。而事件不可以在外部调用,只能在声明事件的类内部被调用。


委托

  委托于引用相似引用指向特定的对象,而委托指向特定方法

    对象引用  --->  特定对象

    委托      --->  特定方法

 

  方法的标识:返回值类型,参数个数,参数类型

    用delegate声明委托,委托的声明与委托的方法的标识要一致

      public delegate int MyDelegate(int a, int b);   //委托的声明

      public int MyDelegateFunc(int a, int b);        //委托方法

 

    实例化一个委托

      MyDelegate arithMethod = new MyDelegate(MyDelegateFunc);    //实例化一个委托,委托方法为

 

    使用委托

      int sum = arithMethod(3, 4);

 

  *** 委托的声明要放在函数的外部(包括Main()函数)***

 

    委托同时也可以作为参数传递给其他函数,这样其他函数就可以通过委托来调用委托函数了

 

    多重委托

      arithMethod += new MyDelegate(Add);

      arithMethod += new MyDelegate(Subtract);

      arithMethod -= new MyDelegate(MyDelegateFunc);

      //多重委托的函数返回值必须是void类型的

 

事件

  事件的委托定义

  public delegate void EventDelegate(object sender, EventArgs s);

  //两个参数:事件的触发类,事件信息

 

  定义一个事件

  public event EventDelegate MyEvent; 

 

  事件处理方法

  public void OnMyEvent(object sender, EventArgs s);

  myEvent += new EventDelegate(OnMyEvent);

 

  触发事件

  myEvent(this, null);

 

  多重事件:与多重委托相同

 

  利用事件传递数据

    定义一个System.EventArgs类的子类

    public class MyEventArgs:EventArgs

   {

       private int myValue;

       public MyEventArgs(int myValue)

       {

           this.myValue = myValue;

       }

       public int MyValue

       {

           get { return myValue; }

       }

   }

   声明事件委托

    public delegate void EventDelegate(object sender, MyEventArgs e);

   定义事件

    public event EventDelegate myEvent;

    myEvent += new EventDelegate(OnMyEvent);

 

   定义事件处理函数OnMyEvent

    public void OnMyEvent(object sender, MyEventArgs e)

    {

    }

   

   触发事件

    myEvent(this, new MyEventArgs(10));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值