自由国度

.Net、C#、WPF、Silverlight、HTML5、JavaScript等,好好写代码。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

原帖:http://www.mscto.com/C__Net/22643005.html
    class Program
    {
        static void Main(string[] args)
        {
            Program.DelegateEvent();//调用示例
        }

        /// <summary>
        /// 委托、事件
        /// </summary>
        private static void DelegateEvent()
        {
            //鲨鱼的脑袋,算是一个事件发起者,the Publisher.
            GetOutPublisher sharkMind = new GetOutPublisher();
            //鲨鱼的身体,算是一个事件处理者,the Subscriber.
            GetOutSubscriber sharkBody = new GetOutSubscriber();
            //建立鲨鱼的神经系统单元 软件开发网 www.mscto.com
            GetOutEventHandler eventAction1 = new GetOutEventHandler(sharkBody.OpenTheDoor);
            GetOutEventHandler eventAction2 = new GetOutEventHandler(sharkBody.PutDownWhat);
            GetOutEventHandler eventAction3 = new GetOutEventHandler(sharkBody.CloseTheDoor);
            //把鲨鱼的神经系统单元与脑子联系起来, 即为将事件处理动作注册到事件委托中.
            sharkMind.OnGetOutHandler += eventAction1;
            sharkMind.OnGetOutHandler += eventAction2;
            sharkMind.OnGetOutHandler += eventAction3;

            //外面天气不错,我决定出去走走,于是产生一系列的事件处理!
            sharkMind.DecideGetOut();
        }
    }
    /// <summary>
    /// 事件数据类
    /// </summary>
    public class GetOutEventArgs : System.EventArgs
    {
        // 出门带啥东西呢?
        private string _takeWhat;
        public GetOutEventArgs()
        {
            this._takeWhat = "Nothing";
        }
        public GetOutEventArgs(string strTakeWhat)
        {
            if (strTakeWhat.Equals(""))
            {
                this._takeWhat = "Nothing";
            }
            else
            {
                this._takeWhat = strTakeWhat;
            }
        }
        public string TakeWhat { get { return _takeWhat; } set { _takeWhat = value; } }
    }

    /// <summary>
    /// 处理事件的方法
    /// </summary>
    class GetOutSubscriber
    {
        public void OpenTheDoor(Object source, GetOutEventArgs e)
        {
            // 开门...
            Console.WriteLine("Open the door...");
        }
        public void PutDownWhat(Object source, GetOutEventArgs e)
        {
            // 放下手中的东西...
            Console.WriteLine("Put down " + e.TakeWhat + "...");
        }
        public void CloseTheDoor(Object source, GetOutEventArgs e)
        {      // 关门...
            Console.WriteLine("Close the door...");
        }
    }

    /// <summary>
    /// 委托
    /// </summary>
    public delegate void GetOutEventHandler(Object source, GetOutEventArgs e);

    /// <summary>
    /// 事件触发类
    /// </summary>
    class GetOutPublisher
    {
        //Publisher 说:喂,我有一个事件,谁来处理?
        public event GetOutEventHandler OnGetOutHandler;
        //Publisher 产生具体的事件
        protected void OnGetOut(GetOutEventArgs e)
        {
            //有谁来负责处理事件吗?
            if (null != this.OnGetOutHandler)
            {
                //让他们来处理吧...
                OnGetOutHandler(this, e);
            }
        }
        //对外公开的接口,调用此方法会产生事件.
        public void DecideGetOut()
        {
            OnGetOut(new GetOutEventArgs());
        }
    }

posted on 2008-12-26 10:24  彬子  阅读(293)  评论(0编辑  收藏  举报