由于在工作流的任务中使用了委托,并且是调用的CreateDelegate这个方法,那么这次就稍微说一下。
首先,委托是一种引用类型,其实就是一种类,而这种类有些特殊,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
实际上这里并不难,写一个简单的例子就能说明。
//定义委托,它定义了可以代表的方法的类型
public delegate void EatDelegate(string name);
public class Program
{
private static void EatDinner(string name)
{
Console.WriteLine("晚饭吃" + name);
}
private static void EatLunch(string name)
{
Console.WriteLine("午饭吃" + name);
}
//注意此方法,它接受一个EatDelegate类型的方法作为参数
private static void EatFood(string name, EatDelegate Eat)
{
if (Eat != null)
{
Eat(name);
}
}
static void Main(string[] args)
{
EatFood("龙虾", EatLunch);
EatFood("江豚", EatDinner);
Console.ReadKey();
}
}
那么在我的工作流代码中,使用的是工作流.Handler=方法。这种写法叫做方法绑定到委托,也简单的写个例子说明一下。
static void Main(string[] args)
{
EatDelegate EatWhat;
EatWhat = EatLunch;
EatWhat("龙虾");
Console.ReadKey();
}
委托可以绑定多个方法,绑定的方式是通过“+=”来实现的。
static void Main(string[] args)
{
EatDelegate EatWhat;
EatWhat = EatLunch;
EatWhat += EatDinner;
EatWhat("龙虾");
Console.ReadKey();
}
这里,要对整个委托做一个处理,如果委托不是第一次绑定方法,那么将传的参数再次传给第二个绑定的方法
//注意此方法,它接受一个EatDelegate类型的方法作为参数
private static void EatFood(string name, EatDelegate Eat)
{
if (Eat != null)
{
Eat(name);
}
}
好吧,这里可能写的不太对,只是为了实现委托的多次绑定,执行的结果显示:
中午吃龙虾
晚上吃龙虾
这样的意思就是委托是多次绑定了方法,方法执行的顺序就是绑定过程的顺序。
这次就研究到这吧,下次说说反射出来的MethodInfo是怎么绑定到委托的。