最近初学了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();
}
}
}
以上实例摘抄自网上,只是做了少许注解,修改,记录下来供以后查阅