注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 最近找工作的面试经历
 帮助

无计划行为——C#委托实践二


2007-09-14 09:33:17
 标签:委托 职责链   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wangjierui.blog.51cto.com/186879/42437
看过委托实践一的朋友如果还是觉得没有感觉的话,那么我们还可以通过委托另外一种应用来理解它,那就是今天要说的无计划行为,即方法的松耦合。这篇帖子可以结合设计模式中的“职责链”模式来理解,也许您可以通过委托简化职责链模式的设计。
 
通常我们实现一个事件的时候,都是将方法罗列在一起,比如
        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”摘掉
        }
同样实现选择开关功能,如果用户有多个选择,多个行为的话,只要随需求往上“挂”功能就是了。
 
而且委托行为的实现,可以通过反射方法动态挂接,比用接口还要方便,在实现插件式开发程序大有作为。
到点了,我得上课去了,下次接着聊。

本文出自 “王杰瑞的技术博客” 博客,请务必保留此出处http://wangjierui.blog.51cto.com/186879/42437





    文章评论
 
2007-09-15 12:29:17
说的有点像拼装SQL查询语句

2007-09-19 14:24:11
不错呀
....

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: