C#中的多播委托和泛型委托

多播委托 简介

  • 每一个委托都是继承自MulticastDelegate,也就是每个都是多播委托。
  • 带返回值的多播委托只返回最后一个方法的值
  • 多播委托可以用加减号来操作方法的增加或者减少。
  • 给委托传递相同方法时 生成的委托实例也是相同的(也就是同一个委托)
代码实现
//声明委托delegate void MulticastTest(); public class MulticastDelegateTest{public void Show(){MulticastTest multicastTest = new MulticastTest(MethodTest); multicastTest(); Action action =new Action(MethodTest); action = (Action)MulticastDelegate.Combine(action, new Action(MethodTest2)); action = (Action)MulticastDelegate.Combine(action, new Action(MethodTest3)); action = (Action)MulticastDelegate.Remove(action, new Action(MethodTest3)); action(); //等同于上面action = MethodTest; action += MethodTest2; action += MethodTest3; action -= MethodTest3; foreach (Action action1 in action.GetInvocationList()){action1(); }Console.WriteLine("=========="); action(); Func func = () => { return "我是Lambda"; }; func += () => { return "我是func1"; }; func += () => { return "我是func2"; }; func += GetTest; func += GetTest; //给委托传递相同方法时 生成的委托实例也是相同的(也就是同一个委托)string result = func(); Console.WriteLine(result); Console.WriteLine("=========="); }#region 委托方法public void MethodTest(){Console.WriteLine("我是方法MethodTest()1"); }public void MethodTest2(){Console.WriteLine("我是方法MethodTest()2"); }public void MethodTest3(){Console.WriteLine("我是方法MethodTest()3"); }public string GetTest(){return "我是方法GetTest()"; }#endregion

泛型委托 代码实现
//泛型委托声明delegate void GenericDelegate(T t); public class GenericDelegate{public static void InvokeDelegate(){GenericDelegate genericDelegate = new GenericDelegate(Method1); genericDelegate("我是泛型委托1"); //官方版本(不带返回值)Action action = new Action(Method1); action("我是泛型委托1"); //ActionGenericDelegate genericDelegate1 = new GenericDelegate(Method2); genericDelegate1(2); //官方版本(带回值)Func func = new Func(Method3); string ret = func("我是带返回值Func委托"); Console.WriteLine( ret ); //Func}#region 委托方法public static void Method1(string str){Console.WriteLine(str); }public static void Method2(int num){Console.WriteLine("我是泛型委托2 "+num); }public static string Method3(string str ){return str; }#endregion}

【C#中的多播委托和泛型委托】以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读