C#之多播委托的单独调用、异常处理

包含多个方法的委托成为多播委托,调用多播委托,可以按照顺序连续调用多个方法,因此,委托的签名就必须返回void;
否则,就只能得到委托调用的最好一个方法的结果

  1. 多播委托可以用运算符"+“和”+=“给委托添加方法调用,同样也可以用运算符”-“和”-="给委托删除方法调用
void Hello(string s)
    {
        System.Console.WriteLine("  Hello, {0}!", s);
    }

    static void Goodbye(string s)
    {
        System.Console.WriteLine("  Goodbye, {0}!", s);
        throw new Exception("error");
    }

    Action<string> ac=Hello;
    ac+=Goodbye;
  1. 多播委托包含一个逐个调用委托集合,如果通过委托嗲用的其中一个方法抛出一个异常,整个迭代就会停止;、
    为了避免这个问题,应该自己迭代方法列表。Delegate类定义GetInvocationList()方法,他返回一个Delegate
    对象数组
   static void Goodbye()
   {
    	Action ac=Hello;
   		ac+=Goodbye;
   		Delegate[] delegates=ac.GetInvocationList();
   		foreach(Action action in delegates)
   		{
     		try
     		{
      			//action();
      			action.DynamicInvoke()(;
      		}catch(Exception)
     		{
    		}
   		}
   }
  1. 匿名方法
namespace _009_匿名方法 {
    class Program {
        static int Test1(int arg1, int arg2)
        {
            return arg1 + arg2;
        }
        static void Main(string[] args)
        {
            //Func<int, int, int> plus = Test1;
            //修改成匿名方法的形式
            Func<int, int, int> plus = delegate(int arg1, int arg2)
            {
                return arg1 + arg2;
            };
            //匿名方法 本质上是一个方法,只是没有名字,任何使用委托变量的地方都可以使用匿名方法赋值
			//Lambda表达式代替匿名方法
			Func<int,int,int> plus = (a,b)=>{return a+b;};
            Func<int, int> test2 = a => a+1;//lambda表示的参数只有一个的时候,可以不加上括号  当函数体的语句只有一句的时候,我们可以不加上大括号 也可以不加上return语句
            Func<int, int> test3 = (a) =>
            {
                return a + 1;
            };
            Console.ReadKey();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值