高天乐 welcome you

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

事件其实很简单,有些经验的都知道是用委托实现的,但是对于初学者,一开始就讲原理,往往会造成一定迷惑,所以我写了这篇最最简单的例子来说明事件怎么用。

现在模拟这种情况:

一只猫走在无人的街道上,突然发现老鼠的味道,就喵的叫了一声,此时,正在觅食的老鼠听到猫叫之后就赶紧跑,老鼠一跑,猫听到声音就去追。。。

 

要用程序如何实现这个逻辑呢?

首先应该有猫和老鼠这两个对象吧,然后猫是主动发现有情况才叫的,老鼠要时时刻刻听着有没有猫叫声,猫呢,也要随时注意有没有老鼠跑的声音,如果发现老鼠跑,就要去追。

 

看来我们要先定义两个类,猫和老鼠,代码如下:

public class Cat
    {
        public event EventHandler CryEventChanged;
        /// <summary>
        /// 闻到老鼠气味就叫
        /// </summary>
        public void Cry()
        {
            Console.WriteLine("黑猫警长:附近有新鲜老鼠屎的味道,弟兄们给我仔细的搜,别让他跑了");
            if (CryEventChanged != null)
            {
                CryEventChanged(this, new EventArgs());
            }
        }

        /// <summary>
        /// 听到老鼠逃跑的脚步就追
        /// </summary>
        /// <param name="mouse">老鼠</param>
        /// <returns>抓住没?</returns>
        public bool Pursue(Mouse mouse)
        {
            Console.WriteLine("猫小编:各位童鞋想知道到底抓到老鼠没?那么请听下回继续分解。");
            return false;
        }

        /// <summary>
        /// 作为一名合格的黑猫警长,一定要具备敏锐的听力,只要老鼠一逃跑就知道
        /// </summary>
        /// <param name="sender">老鼠半只耳</param>
        /// <param name="e">往哪儿跑了?</param>
        public void mouse_FleeEventChanged(Object sender, EventArgs e)
        {
            Console.WriteLine("黑猫警长:十点钟方向有情况,兄弟们给我上,我留下来断后。");
            Pursue((Mouse)sender);
        }
    } 

 

下面这个是老鼠类:

 public class Mouse
    {
        public event EventHandler FleeEventChanged;
        /// <summary>
        /// 听到猫叫声赶紧跑
        /// </summary>
        public void Flee()
        {
            Console.WriteLine("帅老鼠:我跑,我使劲跑,再加把劲,离洞口就三千米远了...");
            if (FleeEventChanged != null)
            {
                FleeEventChanged(this, new EventArgs());
            }
        }

        /// <summary>
        /// 随时都要竖着耳朵听有没有猫叫声
        /// </summary>
        /// <param name="sender">猫</param>
        /// <param name="e">从那个方向传来的?</param>
        public void cat_CryEventChanged(object sender, EventArgs e)
        {
            Console.WriteLine("帅老鼠:我操,这都什么事儿?约鼠妹出来吃个饭也能碰到猫...赶紧跑吧.");
            this.Flee();
        }
    }
 

 

现在都理解逻辑了,咱们就开始主程序实现了,要有猫,有鼠,老鼠监听猫叫,猫监听老鼠跑, 最后猫先叫。

程序如下:

 class Program
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse = new Mouse();

            //老鼠随时听着有没有猫叫声
            cat.CryEventChanged += mouse.cat_CryEventChanged;
            //老猫随时听着有没有老鼠的脚步声
            mouse.FleeEventChanged += cat.mouse_FleeEventChanged;
            //老猫发现情况不对,大叫一声
            cat.Cry();
            Console.ReadLine();
        }
    }
 

最后的结果是这样的:

 

 

到此为止。

 


posted on 2012-11-04 11:00  高天乐  阅读(348)  评论(0编辑  收藏  举报