多播委托

/*
多播委托
*/
using System;

namespace Frank
{
	public class Test
    {
        public static void Main(string[] args)
        {
			Action<double> operations = MathOperations.MultiplyByTwo;
			operations += MathOperations.Square;
			ProcessAndDisplayNumber(operations,20.00);//一次执行多个方法,如果一个方法抛出了异常,那么后面的方法就不会被执行。

			//为了避免方法抛出异常从而使方法停止迭代的情况可以使用Delegate来执行

			Action operations2 = MathOperations.MultiplyByTwo;
			operations2 += MathOperations.Square;
			Delegate[] delegates = operations2.GetInvocationList();
			foreach(Action item in delegates)
			{
				try
				{
					item.Invoke();
				}
				catch (Exception e)
				{
					System.Console.WriteLine(e.Message);//抛出异常后后面的方法一样继续执行。
				}
			}
        }
		public static void ProcessAndDisplayNumber(Action<double> action,double value)
		{
			Console.WriteLine();
			Console.WriteLine("value:{0}",value);
			action.Invoke(value);
		}
	}
	public class MathOperations
	{
		public static void MultiplyByTwo(double value)
		{
			double result = value * 2;
			Console.WriteLine("MultiplyByTwo:" + result);
		}

		public static void MultiplyByTwo()
		{
			double result = 1.10;
			Console.WriteLine("MultiplyByTwo:" + result);
			throw  new Exception("错误!");
		}
		public static void Square(double value)
		{
			double result = value * value;
			Console.WriteLine("Square:"+result);
		}
		public static void Square()
		{
			double result = 2.01;
			Console.WriteLine("Square:"+result);
		}
	}
}

  

posted on 2013-11-28 17:05  wp456  阅读(173)  评论(0)    收藏  举报

导航