事件信息EventArgs:http://msdn.microsoft.com/zh-cn/library/system.eventargs.aspx
1事件信息可以用于传递处理附带的事件数值,可以自定义事件信息类型来继承
2事件委托可以声明在事件的类型中,并可以通过【类型名.事件委托名】来调用该委托类型创建事件的处理代理
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 事件2 { class Program { static void Main(string[] args) { myEventer mEr = new myEventer(); EventWatcher EWr = new EventWatcher(mEr); mEr.OnTrigger("浣熊市行动", 1); } } class myEventArgs:EventArgs//声明事件信息类型,并继承于EventArgs { public myEventArgs(string strinfo,int intinfo) { this.strinfo = strinfo; this.intinfo = intinfo; } private string strinfo; private int intinfo; public string StrInfo { get { return strinfo; } } public int IntInfo { get { return intinfo; } } } class myEventer//声明用于声明事件的类型 { public delegate void myEventerHandler(object sender,myEventArgs mEa);//在类型内部声明事件代理 public event myEventerHandler trigger;//通过事件代理声明事件event public void OnTrigger(string strinfo,int intinfo)//事件触发的方法,这里要传递2个参数 { myEventArgs mEa = new myEventArgs(strinfo,intinfo);//以参数初始化一个新的事件信息对象 trigger(this, mEa); } } class EventWatcher//事件观察和事件处理方法绑定类 { private myEventer mEr; public EventWatcher(myEventer mer)//通过构造函数传递一个事件触发类对象,用于绑定事件处理方法 { this.mEr = mer; mEr.trigger += new myEventer.myEventerHandler(processEvent);//虽然事件委托位于事件类型中,但仍可以通过[类型.事件委托]来访问创建 } private void processEvent(object sender,myEventArgs mEa)//和事件委托相同签名的事件处理方法 { Console.WriteLine("已获取事件信息,事件编号:{0},事件名称:{1}",mEa.IntInfo,mEa.StrInfo); } } }
可以看到,该事件委托并非全局声明,但依旧可以通过
类型对象.事件+=new 类型名称.事件委托(事件处理方法名);
来进行事件的绑定~