C#订阅事件
简单说明:
有书商和消费者,书商进来了新书会对订阅新书到店的用户,进行通知
代码如下:
/// <summary>
/// 书的详细信息
/// </summary>
public class BookEventArgs : EventArgs
{
/// <summary>
/// 书名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 作者
/// </summary>
public string Author { get; set; }
/// <summary>
/// 出版日期
/// </summary>
public DateTime? PublicationDate { get; set; }
/// <summary>
/// 价格
/// </summary>
public decimal Price { get; set; }
public BookEventArgs(string name, string author, DateTime? publicationDate, decimal price)
{
Name = name;
Author = author;
PublicationDate = publicationDate;
Price = price;
}
}
/// <summary>
/// 卖书的商店老板
/// </summary>
public class Bookseller
{
/// <summary>
/// 定义新书事件,用于发布新书到店的通知
/// </summary>
public event EventHandler<BookEventArgs> NewBookEventHander;
public void NewBook(BookEventArgs book)
{
Console.WriteLine($"书名:{book.Name};作者:{book.Author};出版日期:{book.PublicationDate};价格:{book.Price}");
//新书到店,发布信息通知
NewBookEventHander?.Invoke(typeof(Bookseller), book);
}
}
/// <summary>
/// 消费者
/// </summary>
public class Consumer
{
/// <summary>
/// 客户名称
/// </summary>
public string ConName { get; set; }
public Consumer(string conName)
{
this.ConName = conName;
}
/// <summary>
/// 新书通知
/// </summary>
/// <param name="o"></param>
/// <param name="args"></param>
public void NewBookNotice(object o, BookEventArgs args) => Console.WriteLine($"消费者:{ConName},看到新书{args.Name}");
}
//调用方式
var bookseller = new Bookseller();
var consumer1 = new EventTake.Consumer("张三");
//订阅新书到店通知事件
bookseller.NewBookEventHander += consumer1.NewBookNotice;
bookseller.NewBook(new BookEventArgs("钢铁是怎样炼成的", "奥斯特洛夫斯基", DateTime.Now.AddYears(-20), 88));
var consumer2 = new EventTake.Consumer("李四");
bookseller.NewBookEventHander += consumer2.NewBookNotice;
bookseller.NewBook(new BookEventArgs("我的兄弟叫顺溜", "随风", DateTime.Now.AddYears(-10), 33));
//取消订阅
bookseller.NewBookEventHander -= consumer2.NewBookNotice;
bookseller.NewBook(new BookEventArgs("万万没想到", "教授", DateTime.Now.AddYears(-5), 99));
Console.ReadLine();