GetInvocationList 方法

来源:互联网 发布:广发淘宝卡 集分宝2017 编辑:程序博客网 时间:2024/06/01 10:25

Delegate.GetInvocationList 方法 ()

返回委托的调用列表。

下面的示例将三种方法分配给委托。 然后,它调用GetInvocationList方法以获取分配给委托,以按逆序执行委托并执行其名称不包括子字符串的方法的方法总数”文件”。

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;namespace test{    class Program    {        public static void Main()        {            Action<String> outputMessage = null;            outputMessage += Console.WriteLine;            outputMessage += OutputToFile;            outputMessage += Show;            Console.WriteLine("调用列表有{0}个方法.", outputMessage.GetInvocationList().Length);            // 通常调用委托            outputMessage("Hello there!");            //Console.WriteLine("按<Enter>继续...");            Console.ReadLine();            // 以相反顺序调用调用列表中的每个委托            for (int counter = outputMessage.GetInvocationList().Length - 1; counter >= 0; counter--)            {                var outputMsg = outputMessage.GetInvocationList()[counter];                outputMsg.DynamicInvoke("问候和敬意!");            }            //Console.WriteLine("按<Enter>继续...");            Console.ReadLine();            // 调用不写入文件的每个委托            for (int ctr = 0; ctr < outputMessage.GetInvocationList().Length; ctr++)            {                var outputMsg = outputMessage.GetInvocationList()[ctr];                if (!outputMsg.GetMethodInfo().Name.Contains("File"))                {                    outputMsg.DynamicInvoke(new String[] { "Hi!" });                }            }            Console.ReadKey();        }        private static void OutputToFile(String s)        {            var sw = new StreamWriter(@".\output.txt");            sw.WriteLine(s);            sw.Close();        }        private static void Show(String s)        {            Console.WriteLine("Show---"+s);        }    }}

运行结果如图:

这里写图片描述

原创粉丝点击