C# 菜鸟学习事件与委托

这是在项目中碰到的事例:

   public delegate void GetSMSCodeHandler(object sender, MsgCodeErrorEventArgs args);

    public delegate Task<bool> GetSMSCodeEventHandler(object sender, RoutedEventArgs args);

    public class MsgCodeErrorEventArgs : EventArgs    

    {        

           public Exception error;   

  }

 

(1) 如果在引发事件后,事件发出通知的消息是有自定义数据的,那么应该将这些事件消息专门封装到一个类中进行打包传送,通常这个类继承于System.EventArgs。例如:

    public class MsgCodeErrorEventArgs: EventArgs
   {
public Exception error;
}

 

     在委托原型中我们发现有一个参数 object sender,这是事件模型要求的,它是引发事件的对象,并且要求是object 类型,之所以要求是object类型,是方便于继承,因为促使事件引发的对象可能是很多种类型。后一个参数是委托的参数,尽量保证事件数据参数名为e,这样更方便使用者理解,如:MsgCodeErrorEventArgse。

  事件定义的时候通常event结尾,命名规范。如SMSEevent

  public event GetSMSCodeHandler ValidSMSCodeChanged;

 

 下面的没用过,在网上看到的,记录下:怎么用还待自己探索

.NET Framework还提供了泛型版本的事件委托:

public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);

这样在使用此委托时,就可以指定任意类型的事件数据包装器类型。当你想使用一个事件定义在多种场合下传递多种事件数据类型的时候,泛型委托很有用。如下:

public event EventHandler<MsgCodeErrorEventArgs> SMSEevent2;

    一般引发该事件的函数用On开头,并且方法应该是受保护的虚方法,在派生类中可以重写此方法来控制对事件通知的发出。

如下面实例,

       protected virtual void OnSMSEevent()
        {

              if (ValidSMSCodeChanged!= null)
                {
                    MsgCodeErrorEventArgs args = new MsgCodeErrorEventArgs();
                    OnGetSMSCodeError(this, args);
                }

        }

     然后再某一个地方OnSMSEevent()事件就可以被执行

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/xiaomifengduokeai/p/3359116.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值