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 Consumer("张三");
            //订阅新书到店通知事件
            bookseller.NewBookEventHander += consumer1.NewBookNotice;
            bookseller.NewBook(new BookEventArgs("钢铁是怎样炼成的", "奥斯特洛夫斯基", DateTime.Now.AddYears(-20), 88));
            var consumer2 = new 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();

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

双叶红于二月花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值