由于在工作流的任务中使用了委托,并且是调用的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是怎么绑定到委托的。