B\S备忘录20——委托

来源:互联网 发布:淘宝人参 编辑:程序博客网 时间:2024/04/29 11:34

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

0 0
原创粉丝点击