看过委托实践一的朋友如果还是觉得没有感觉的话,那么我们还可以通过委托另外一种应用来理解它,那就是今天要说的无计划行为,即方法的松耦合。这篇帖子可以结合设计模式中的“职责链”模式来理解,也许您可以通过委托简化职责链模式的设计。
通常我们实现一个事件的时候,都是将方法罗列在一起,比如
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”摘掉
}
同样实现选择开关功能,如果用户有多个选择,多个行为的话,只要随需求往上“挂”功能就是了。
而且委托行为的实现,可以通过反射方法动态挂接,比用接口还要方便,在实现插件式开发程序大有作为。
到点了,我得上课去了,下次接着聊。