事件信息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 類型名稱.事件委托(事件處理方法名);
來進行事件的綁定~