public delegate void Mydel(); class Program { static void Main(string[] args) { Mydel del = T1; del += T2; del += T3; del += T4; del -= T2; del();
//等价于,反编译器查看:
Mydel del = new Mydel(Program.T1);
del = (Mydel)Delegate.Combine(del, new Mydel(Program.T2));//Combine返回的是父类类型,需要强转子类
del = (Mydel)Delegate.Combine(del, new Mydel(Program.T3));
del = (Mydel)Delegate.Combine(del, new Mydel(Program.T4));
del = (Mydel)Delegate.Remove(del, new Mydel(Program.T2));
del();
Console.ReadKey();
} public static void T1() { Console.WriteLine("我是T1"); } public static void T2() { Console.WriteLine("我是T2"); } public static void T3() { Console.WriteLine("我是T3"); } public static void T4() { Console.WriteLine("我是T4"); } }
class Program { static void Main(string[] args) { Action<string> action = T1; action += T2; action += T3; action += T4; action("你好"); Console.ReadKey(); } public static void T1(string s) { Console.WriteLine("我是T1"+s); } public static void T2(string s) { Console.WriteLine("我是T2" + s); } public static void T3(string s) { Console.WriteLine("我是T3" + s); } public static void T4(string s) { Console.WriteLine("我是T4" + s); } } 反编译器: private static void Main(string[] args) { Action<string> action = new Action<string>(Program.T1); action = (Action<string>)Delegate.Combine(action, new Action<string>(Program.T2));//Combine返回的是父类类型,需要强转子类 action = (Action<string>)Delegate.Combine(action, new Action<string>(Program.T3)); action = (Action<string>)Delegate.Combine(action, new Action<string>(Program.T4)); action("你好"); Console.ReadKey(); }