初学委托事件

最近初学了C# 对委托和事件不是很了解,仔细学习了网上相关文章,对书商和消费者实例进行了注解。

namespace BookSellerConsumer
{
    /// <summary>
    /// 书的详细信息argues
    /// </summary>
    class BookEventArgs : EventArgs
    {
        public string Name { get; set; }
        public string Author { get; set; }
        public DateTime PublicationDate { get; set; }
        public Decimal Price { get; set; }
        
		//构造函数
        public BookEventArgs(string name, string author, DateTime publicationDate, decimal price)
        {
            Name = name;
            Author = author;
            PublicationDate = publicationDate;
            Price = price;
        }

    }
}
namespace BookSellerConsumer
{
    /// <summary>
    /// 卖书的商店老板
    /// </summary>
    
    class Bookseller
    {
        //定义新书事件,用于发布新书到店的通知
        public event EventHandler<BookEventArgs> NewBookEventHander;

        public void NewBookIsComming(BookEventArgs bookEventArgs)
        {
            Console.WriteLine(string.Format("新书到啦!书名:{0};作者:{1};出版日期:{2};价格:{3}", bookEventArgs.Name, bookEventArgs.Author, bookEventArgs.PublicationDate, bookEventArgs.Price));
            //NewBookEventHander.Invoke(this, bookEventArgs);
            if (NewBookEventHander != null)
            {
                //新书到店,发布信息通知[(发布-订阅)(触发-订阅)(注册事件+=;和注销事件-=)]
                //发现 "发布-订阅" "触发-订阅" 都是一个意思(就是先触发事件,然后订阅者就能收到消息)
                //注册事件就是 绑定具体方法到事件用+=;
                //注销事件就是 解绑方法用-=
                
				//以下三种方法选其一可触发事件
                //NewBookEventHander.Invoke(typeof(Bookseller), bookEventArgs);
                //NewBookEventHander.Invoke(this, bookEventArgs);
                NewBookEventHander(this, bookEventArgs);
                
            }
        }

    }
}
namespace BookSellerConsumer
{
    /// <summary>
    /// 消费者(订阅者)
    /// </summary>
    class Consumer
    {
        public string ConsumerName { get; set; }

        public Consumer(string consumerName)
        {
            this.ConsumerName = consumerName;
        }

        public void AcceptNewBookNotice(object sender, BookEventArgs e)
        {
            Console.WriteLine(string.Format("消费者:{0},看到新书{1}",ConsumerName,e.Name));
        }


    }
}
namespace BookSellerConsumer
{
    class Program
    {
        static void Main(string[] args)
        {            
            Bookseller  bookseller = new Bookseller();

            //张三 订阅新书到店通知事件
            Consumer consumer1 = new Consumer("张三");
            bookseller.NewBookEventHander += consumer1.AcceptNewBookNotice;

            //李四 订阅新书到店通知事件            
            Consumer consumer2 = new Consumer("李四");
            bookseller.NewBookEventHander += consumer2.AcceptNewBookNotice;

            //书商发布两本书
            bookseller.NewBookIsComming(new BookEventArgs("我的兄弟叫顺溜", "随风", DateTime.Now.AddYears(-10), 33));
            bookseller.NewBookIsComming(new BookEventArgs("钢铁是怎样炼成的", "奥斯特洛夫斯基", DateTime.Now.AddYears(-20), 88));

            //取消订阅  
            bookseller.NewBookEventHander -= consumer1.AcceptNewBookNotice;
            bookseller.NewBookEventHander -= consumer2.AcceptNewBookNotice;

            Console.ReadLine();

        }
    }
}

以上实例摘抄自网上,只是做了少许注解,修改,记录下来供以后查阅

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值