C#中的委託和事件(初稿)

來源:互聯網
上載者:User
文章目錄
  • 2.5.4 匿名方法的使用(新補充)

PDF版下載:第2章-C#中的委託和事件

這個是完整的第2章,C#中的委託和事件,按照編輯要求,排版比較散,實際沒那麼多頁的,成書時估計也就40頁。初稿,還會有較大改動。這是寫作前期的最後一篇樣章。

2.5.4 匿名方法的使用(新補充)

我們現在來做一個小程式:建立一個Windows表單應用程式,然後在預設建立的Form1上添加兩個按鈕,分別命名為btnClickMe1和btnClickMe2,顯示的文本為“點擊我1”、“點擊我2”,如所示:

然後我們希望在點擊這兩個按鈕的時候,能夠彈出一個對話方塊,向使用者顯示一個提示,例如“您好,我的讀者,希望您能喜歡本書!”(順便一提,我是真心這麼希望的^^)。如果在往常,你可能會毫不猶豫的在按鈕上雙擊,然後編寫按鈕的事件處理代碼,但是我們現在在講委託和事件,所以讓我們換一種方式,像下面這樣修改Form1.cs檔案:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        btnClickMe1.Click += new EventHandler(btnClickMe_Click);
        btnClickMe2.Click += new EventHandler(btnClickMe_Click);
    }

    void btnClickMe_Click(object sender, EventArgs e) {
        MessageBox.Show("您好,我的讀者,希望您能喜歡本書!");
    }
}

我知道這段代碼現在已經不會為你造成任何障礙了,所以就不費時間解釋它了。但是我們的第一個反應就是代碼重用了,因為兩個Click事件共用了同一個事件處理方法。接下來我們再思考一下,像這種兩個按鈕共用同一個Click事件處理方法的情況並不多見,現在讓我們刪除掉btnClickMe2,僅保留一個btnClickMe1,好了,現在你看出問題了嗎?btnClickMe_Click()方法僅僅是為btnClickMe1服務,但是它們卻離得如此之遠,以至於我們在表單代碼很多的情況下(你可以想像一下表單有幾百行代碼,而btnClickMe_Click()隱藏在一個小角落裡)不得不花些時間來尋找它。我們會想,要是有一種文法,能夠直接將方法體付給btnClickMe1的Click事件就好了,比如說像下面這樣:

btnClickMe1.Click += {
    MessageBox.Show("您好,我的讀者,希望您能喜歡本書!");
};

現在你應該知道我要講什麼了,這就是本小節的主題――匿名方法,只不過上面的代碼還需要再做一點修改,因為我們還缺少了一樣東西,就是方法的簽名:

btnClickMe1.Click += delegate(object sender, EventArgs e) {
    MessageBox.Show("您好,我的讀者,希望您能喜歡本書!");
};

OK,現在運行程式,你可以發現程式已經運轉如常了。但是仔細看看這段代碼,你是否還能發現問題?好吧,我向你提示一下:方法體既沒有使用參數sender,也沒有使用參數e,但是為了讓編譯器通過,我們卻把它們添加了進來,這樣是不是很冗餘?為瞭解決這個問題,C#又提供了一種更簡潔的文法,在你不使用方法參數時使用,就好像我們現在這種情況:

btnClickMe1.Click += delegate{
    MessageBox.Show("您好,我的讀者,希望您能喜歡本書!");
};

這和我們上面的推斷幾乎完全一樣,只是多了個delegate關鍵字而已,是不是很方便的能力?下次編寫代碼時,你就可以試著使用一下它,這樣會使你的印象更加牢固。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.