標籤:blog 使用 re 代碼 c line
為什麼要使用事件呢?舉個簡單的例子,比如說你的介面上有個bottom按鈕,然後你寫了一個點擊一下這個按鈕就彈出一個訊息視窗的代碼,然而你要彈出訊息視窗的這個事,開發控制項的人並不知道,所以開發人員預先定義好了這個事件,他並不關心你點擊這個按鈕要幹什麼,但是按鈕卻通過點擊事件調用了你的代碼。
其實事件說簡單點:就像委託一樣,只是他多了一個約束,這個約束就是當XXX達到了某個時刻(某個點),然後就觸發了XXX事情;
還不理解,沒關係,看個小例子;大家平時都喜歡關注微博吧,就拿這個做個例子吧,可能不是很好,湊合著看看吧;
粉絲(Fans)關注了大V(bigV),相當於訂閱了一個事件
大V發了一條微博,相當於產生了一個事件
在這個事件中Fans收到了大V的微博,下面是具體代碼
這是微博的內容,即事件的一個參數
public class MicroBlogEventArgs : EventArgs { private DateTime sendDateTime; public DateTime SendDateTime { get { return this.sendDateTime; } } private string author; public string Author { get { return this.author; } } private string context; public string Context { get { return this.context; } } public MicroBlogEventArgs(DateTime createDateTime, string author, string context) { this.sendDateTime = createDateTime; this.author = author; this.context = context; } }
這是大V對象,大V定義了事件
public class BigV { private string name; public BigV(string name) { this.name = name; } public event EventHandler<MicroBlogEventArgs> SendMicroBlog; /// <summary> /// 由大V產生一個事件(即大V發了一條微博) /// </summary> /// <param name="e"></param> public void OnSendMicroBlog(MicroBlogEventArgs e) { System.Threading.Interlocked.CompareExchange(ref SendMicroBlog, null, null); if (SendMicroBlog!=null) { SendMicroBlog(this, e); } } public void SimulateSendMicroBlog(DateTime dt,string context) { MicroBlogEventArgs e = new MicroBlogEventArgs(dt, this.name, context); OnSendMicroBlog(e); } }
下面這個就是Fans了,fans只要關注(訂閱)大V,就可以看到大V的微博了
public class Fans { public Fans( BigV bigV) { bigV.SendMicroBlog += new EventHandler<MicroBlogEventArgs>(bigV_SendMicroBlog); } void bigV_SendMicroBlog(object sender, MicroBlogEventArgs e) { Console.WriteLine("{0},{1}發了:{2}", e.SendDateTime, e.Author, e.Context); } }
下面就是類比,大V發微博,然後關注他的fans就能收到他的微博了
class Program{ static void Main(string[] args) { BigV bigV = new BigV("zhangsan"); Fans fans = new Fans(bigV); bigV.SimulateSendMicroBlog(DateTime.Now, "NO ZUO NO DIE"); Console.ReadKey(); }}
其實大家都知道事件是怎麼一回事,只是拿代碼來表示的時候就感覺怎麼也寫不出來,所以大家不妨在網上多找幾個例子練練,今天就到此吧