学习完委托,我们在来看看事件。委托在事件中可谓是物尽其用。

 

      说起事件最经典的范例要属发行订阅范例了,出版社是事件的发布者,订户是事件的订阅者。让我们来二者之间的关系如下图(图片和概念都是网上找的,借花献佛了大家见谅):

事件发行者(Publisher):
  一个事件发行者,也称作发送者(sender),其实就是一个对象,这个对象会自行维护本身的状态信息。当本身状态信息变动时,便触发一个事件,并通知所有的事件订阅者。
事件订阅者(Subscriber)
  对事件感兴趣的对象,也称为接收者(Receiver),可以注册感兴趣的事件,通常需提供一个事件处理程序,在事件发行者触发一个事件后,会自动执行这段代码的内容。

浅谈委托和事件之C#的事件模型

首先订户到出版社订阅图书,出版社发行图书。那么事件在何处呢?出版社发行图书这个动作就是个事件,当出版社发行图书的时候,如果订户有订阅该图书,就会看到订阅的图书。下面我们结合代码来看:

/*
 * Date: 2011-07-07
 * Time: 9:28
 * Create by xiangyun
 */
using System;
 
namespace LearnEvent
{
    //发行者
    public class Publisher
    {
        public delegate void Publish();
        //public  Publish OnPublish; //把event关键字去掉好像也可以
        public event Publish OnPublish;
        public void issue()
        {
            if (OnPublish!=null)
            {
                Console.WriteLine("发行文章");
                OnPublish();//实例化委托后调用
            }
        }
    }
    //订阅者
    public class Subscriber
    {
        public void Receive()
        {
            Console.WriteLine("接受订阅的文章");
        }
    }
    class Program
    {
        public static void Main(string[] args)
        {
            Publisher pb = new Publisher();
            Subscriber sb = new Subscriber();
            
            //注册事件 其实就是把委托实例化后指向具体的执行函数
            pb.OnPublish += new Publisher.Publish(sb.Receive);
          pb.issue();//触发事件
            Console.Write("Press any key to continue . . . ");
          Console.ReadKey(true);
        }
    }
}

相关文章: