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);
}
}
}