c# 创建委托 消息订阅_C# 委托获取多个订阅者的返回值

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 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 DoSomething()

{

List strList = new List();

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#,创建委托,消息订阅)