B\S备忘录20——委托

  由于在工作流的任务中使用了委托,并且是调用的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
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值