代码1:
class Program
{
static void Main(string[] args)
{
MessageProducer messageProducer = new MessageProducer();
Subscriber zhangsan = new Subscriber("张三");
Subscriber lisi = new Subscriber("李四");
Subscriber wangwu = new Subscriber("王五");
messageProducer.Subscribe(zhangsan);
messageProducer.Subscribe(lisi);
messageProducer.Subscribe(wangwu);
messageProducer.Produce("hello");
messageProducer.Unsubscribe(lisi);
messageProducer.Produce("hello again");
}
}
public delegate void MessageProducerHandler(string message);
public class MessageProducer
{
public event MessageProducerHandler MessageHandle;
/// <summary>
/// 订阅
/// </summary>
/// <param name="subscriber"></param>
public void Subscribe(Subscriber subscriber)
{
Console.WriteLine($"【{subscriber.Name}】订阅了消息");
MessageHandle += subscriber.OnMessage;
}
/// <summary>
/// 取消订阅
/// </summary>
/// <param name="subscriber"></param>
public void Unsubscribe(Subscriber subscriber)
{
Console.WriteLine($"【{subscriber.Name}】取消了消息订阅");
MessageHandle -= subscriber.OnMessage;
}
/// <summary>
/// 发布一条消息
/// </summary>
/// <param name="message"></param>
public void Produce(string message)
{
Console.WriteLine($"发布消息【{message}】");
MessageHandle?.Invoke(message);
}
}
public class Subscriber
{
public Subscriber(string name)
{
Name = name;
}
/// <summary>
/// 订阅者名称
/// </summary>
public string Name { get; }
/// <summary>
/// 消息处理方法
/// </summary>
/// <param name="message"></param>
public void OnMessage(string message)
{
Console.WriteLine($"【{Name}】收到消息【{message}】");
}
}
代码2:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EventDemo
{
public delegate void MsgHandler(string msg);
public class PinDuoDuo
{
public event MsgHandler msgHandler;
public void Order(User user)
{
Console.WriteLine("{0}已拼单", user.Name);
msgHandler += user.OnMessage;
}
public void UnOrder(User user)
{
Console.WriteLine("{0}取消拼单", user.Name);
msgHandler -= user.OnMessage;
}
public void ShipGoods(string msg)
{
Console.WriteLine("发货");
msgHandler?.Invoke(msg);
}
}
public class User
{
public User(string name)
{
Name = name;
}
public string Name { get; set; }
public void OnMessage(string msg)
{
Console.WriteLine("{0}收到消息:{1}", Name, msg);
}
}
public class Program
{
public static void Main()
{
PinDuoDuo pdd = new PinDuoDuo();
User zs = new User("张三");
User lisi = new User("李四");
User wmz = new User("王麻子");
pdd.Order(zs);
pdd.Order(lisi);
pdd.Order(wmz);
pdd.UnOrder(lisi);
pdd.ShipGoods("货已发出");
}
}
}