看過委托實踐一的朋友如果還是覺得沒有感覺的話,那麼我們還可以通過委托另外一種應用來了解它,那就是今天要說的無計劃行為,即方法的松耦合。這篇文章可以結合設計模式中的“職責鍊”模式來了解,也許您可以通過委托簡化職責鍊模式的設計。
通常我們實作一個事件的時候,都是将方法羅列在一起,比如
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("1");
MessageBox.Show("2");
}
這樣的方式有時候不能适應我們的要求。比如根據使用者的選擇,我們隻讓它執行“1”或“2”,當然,您可以通過判斷條件實作。
bool UserSelect=false;
///使用者選擇,關閉“2”
private void button2_Click(object sender, EventArgs e)
this.UserSelect=true;
if(!this.UserSelect) MessageBox.Show("2");
那如果使用者有多個選擇,要設多少個開關?且不說實作複雜度,就這個條件來說,不管有沒有選擇都需要關照一下。下面我們請出今天的主角——委托,看它是如何實作上述需求的,有請!
private void Form1_Load(object sender, EventArgs e)
button1.Click+=new EventHandler(button2_Click);//實作彈出“1”“2”
MessageBox.Show("1");
private void button2_Click_1(object sender, EventArgs e)
button1.Click -= new EventHandler(button2_Click);//将“2”摘掉
同樣實作選擇開關功能,如果使用者有多個選擇,多個行為的話,隻要随需求往上“挂”功能就是了。
而且委托行為的實作,可以通過反射方法動态挂接,比用接口還要友善,在實作插件式開發程式大有作為。
到點了,我得上課去了,下次接着聊。
本文轉自 王傑瑞 51CTO部落格,原文連結:http://blog.51cto.com/wangjierui/42437,如需轉載請自行聯系原作者