天天看點

無計劃行為——C#委托實踐二

看過委托實踐一的朋友如果還是覺得沒有感覺的話,那麼我們還可以通過委托另外一種應用來了解它,那就是今天要說的無計劃行為,即方法的松耦合。這篇文章可以結合設計模式中的“職責鍊”模式來了解,也許您可以通過委托簡化職責鍊模式的設計。

通常我們實作一個事件的時候,都是将方法羅列在一起,比如

        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,如需轉載請自行聯系原作者

繼續閱讀