C#事件淺入

來源:互聯網
上載者:User

標籤: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();    }}

其實大家都知道事件是怎麼一回事,只是拿代碼來表示的時候就感覺怎麼也寫不出來,所以大家不妨在網上多找幾個例子練練,今天就到此吧

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.