定义
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
将方法作为方法的参数年底了公司都有活动,已知活动内容包括吃饭和旅游,吃的已经确定,但是具体去哪旅游不清楚,于是我们抽象得出如下类。
public class A
{
public delegate void Travel();
public void Active(Travel travel)
{
Eat();
travel();
}
public void Eat()
{
MessageBox.Show("Eat fish!");
}
}
当一切准备工作做好了,旅行路线也已经制定好了,我们就可以组织活动了。
/// <summary>
/// 测试委托
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
A a = new A();
A.Travel travel = new A.Travel(ToJiuZhai);
a.Active(travel);
}
private void ToJiuZhai()
{
MessageBox.Show("to jiuzhai!");
}
委托还有另外一种写法:
A.Travel travel;
/// <summary>
/// 测试委托
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
A a = new A();
travel += ToJiuZhai;
a.Active(travel);
}
private void ToJiuZhai()
{
MessageBox.Show("to jiuzhai!");
}
由此可见,委托就是对不能具体化的方法的抽象,但是又不能随意改变方法的输入和输出,是一种既有约束又灵活的编程方式,委托要实现的内容要到具体用的时候才能知道。