您的位置:首页 > 编程语言 > C#

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";
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: