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

猜你喜欢

转载自blog.csdn.net/qq_31975127/article/details/85246946