C# 委托获取多个订阅者的返回值
2016-01-21 22:47
288 查看
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication委托为什么没有返回值 { class Program { static void Main(string[] args) { Publishser p = new Publishser(); Subscriber1 sub1 = new Subscriber1(); Subscriber2 sub2 = new Subscriber2(); Subscriber3 sub3 = new Subscriber3(); p.NumberChanged += new DemoEventHandler(sub1.OnNumberChanged); p.NumberChanged += new DemoEventHandler(sub2.OnNumberChanged); p.NumberChanged += new DemoEventHandler(sub3.OnNumberChanged); List<string> strList = p.DoSomething(); foreach (var item in strList) { Console.WriteLine(item); } } } //定义委托 public delegate string DemoEventHandler(int num); //定义事件发布者 public class Publishser { public event DemoEventHandler NumberChanged; public List<string> DoSomething() { List<string> strList = new List<string>(); if (NumberChanged == null) return strList; //获取委托数组 Delegate[] delArray = NumberChanged.GetInvocationList(); foreach (Delegate del in delArray) { DemoEventHandler method = (DemoEventHandler)del; strList.Add(method(100)); } return strList; } } //定义事件订阅者 public class Subscriber1 { public string OnNumberChanged(int num) { Console.WriteLine(num); return "Subscriber1"; } } public class Subscriber2 { public string OnNumberChanged(int num) { Console.WriteLine(num); return "Subscriber2"; } } public class Subscriber3 { public string OnNumberChanged(int num) { Console.WriteLine(num); return "Subscriber3"; } } }
相关文章推荐
- c# PrintDocument 设置自定义纸张大小的示例
- C# 事件访问器(Event Accessor)
- C# WinForm 父窗体 子窗体 传值
- C# DataTable的詳細用法
- C#中为何要使用ref参数 (个人理解)
- C# .NET开发图形图像程序时提示"GDI+ 中发生一般性错误"
- C# 值类型与引用类型 (上)
- C#中static类型的变量和方法
- C#类的 static变量
- C#链接文件的应用
- C#全角和半角转换
- 在C#中创建和读取XML文件
- C#语言基础(一)
- C#利用Windows自带gdi32.dll实现抓取屏幕功能实例
- C#调用FFMPEG实现桌面录制(视频+音频+生成本地文件)【笔记】
- AWS 之 S3篇<.NET(c#)批量上传文件>
- C# 利用 OpenCV 进行视频捕获 (笔记)
- RickTextBox控件基础用法
- 伸展二叉树树(C#)
- C#的Enum——枚举