clr via c# 事件

1,定义需要发送给事件接收者的附加信息的类

class NewMailEventArgs:EventArgs//第一步:定义一个容纳给事件接受者信息的类。
    {
        public string From { get; }
        public string To { get; }
        public string Subject { get; }
        public NewMailEventArgs(string from,string to,string subject)
        {
            this.From = from;
            this.To = to;
            this.Subject = subject;
        }
    }

2,定义事件成员

class MailManager
    {
        public event EventHandler<NewMailEventArgs> NewMail;//首先,这是一个委托方法,原型是void MethodName(Object sender,NewMailEventArgs e)
        protected virtual void OnNewMail(NewMailEventArgs e)
        {
            e.Raise<NewMailEventArgs>(this, ref NewMail);
        }

        public void SimulateNewMail(string from,string to ,string subject)
        {
            OnNewMail(new NewMailEventArgs(from, to, subject));
        }
    }
  • 首先定义了一个事件成员 NewMail 并且,其类型是EventHandler<NewMailEventArgs>,该类型的原型是

             void Delegate<T>(object sender,T e);

  •    然后,定义一个出发函数来触发事件。OnNewMail(NewMailEventArgs e),该事件,通过 NewMail(this,e) 来触发

  上面是一个扩展调用,实际上就是调用 NewMail(this,e);

  一个事件,在内部实际上生成了3个构造:

  • 一个私有的委托字段
  • 一个add_xxx方法
  • 一个remove_xxx方法

猜你喜欢

转载自www.cnblogs.com/frogkiller/p/12264364.html