C# 委托获取多个订阅者的返回值

来源:互联网 发布:域名注册的流程 编辑:程序博客网 时间:2024/06/08 16:04
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";        }    }}

0 0