Joy''s Code for Event Handler

来源:岁月联盟 编辑:zhu 时间:2003-07-12
using System;

namespace testform
{
    /// <summary>
    /// Event source
    /// </summary>
    public class Bird
    {
        public Bird()
        {
        }
        public void Flying()
        {
            this.OnBirdEvent(BirdStatus.Flying);
        }
        public void Dead()
        {
            this.OnBirdEvent(BirdStatus.Dead);

        }
        public void Sleep()
        {
            this.OnBirdEvent(BirdStatus.Sleeping);
        }
        private void OnBirdEvent(BirdStatus s)
        {
            if(this.BirdEvent!=null)
            {
                this.BirdEvent(this,new BirdEventArgs(s));
            }
        }
        public event BirdEventHandler BirdEvent;
    }
    public delegate void BirdEventHandler(object sender,BirdEventArgs e);
    public class BirdEventArgs:EventArgs
    {
        private BirdStatus _s;
        
        public BirdEventArgs(BirdStatus s)
        {
            this._s=s;
        
        }
        
        public BirdStatus Status
        {
            get
            {
                return this._s;
            }
        }
    
    }
    public enum BirdStatus
    {
        Flying,
        Sleeping,
        Dead
    }
    /// <summary>
    /// Event Target
    /// </summary>
    public class Hunter
    {
        private Bird bird;
        public Hunter()
        {
            bird=new Bird();
            bird.BirdEvent+=new BirdEventHandler(this.OnWatch);
        }
        private void OnWatch(object sender,BirdEventArgs e)
        {
            switch(e.Status)
            {
                case BirdStatus.Flying:
                    this.Sleep();
                    break;
                case BirdStatus.Dead:
                    this.FireBird();
                    break;
                case BirdStatus.Sleeping:
                    this.KillBird();
                    break;
            }
        }
        private void KillBird()
        {
            ...
    
        }
        private void FireBird()
        {
            ...
        }
        private void Sleep()
        {
            ...
        }
    }
}