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#中的多播委托和泛型委托】以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- C#反射调用dll文件中的方法操作泛型与属性字段
- C++详解多线程中的线程同步与互斥量
- app自动化测试中的相关api
- APP中的 H5和原生页面如何分辨()
- PHP使用重载
- [HTML] H5在webApp中的注意事项
- 通过android利用tomcat获取到电脑硬盘中的图片
- 如何提取app软件的apk格式中的字体()
- VS2008中的配置文件app.config简单小结
- PHP中的访问说明符