看过委托实践一的朋友如果还是觉得没有感觉的话,那么我们还可以通过委托另外一种应用来理解它,那就是今天要说的无计划行为,即方法的松耦合。这篇帖子可以结合设计模式中的“职责链”模式来理解,也许您可以通过委托简化职责链模式的设计。
 
通常我们实现一个事件的时候,都是将方法罗列在一起,比如
        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;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("1");
           if(!this.UserSelect)  MessageBox.Show("2");
        }
那如果用户有多个选择,要设多少个开关?且不说实现复杂度,就这个条件来说,不管有没有选择都需要关照一下。下面我们请出今天的主角——委托,看它是如何实现上述需求的,有请!
        private void Form1_Load(object sender, EventArgs e)
        {
            button1.Click+=new EventHandler(button2_Click);//实现弹出“1”“2”
        }
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("1");
        }
       ///用户选择,关闭“2”
        private void button2_Click_1(object sender, EventArgs e)
        {
            button1.Click -= new EventHandler(button2_Click);//将“2”摘掉
        }
同样实现选择开关功能,如果用户有多个选择,多个行为的话,只要随需求往上“挂”功能就是了。
 
而且委托行为的实现,可以通过反射方法动态挂接,比用接口还要方便,在实现插件式开发程序大有作为。
到点了,我得上课去了,下次接着聊。