读书人

event怎么实时监测事件是否发生?猫狗

发布时间: 2012-07-29 15:26:13 作者: rapoo

event如何实时监测事件是否发生?猫狗和耗子
我在看杨中科老师的课程,里面有个“猫狗和耗子”的面试题:“猫叫 完了 狗叫 猫咬了一口老鼠 老鼠叫 猫如果咬狗,狗也叫”我想把它改成event 事件版的,我写了几个类:(Mouse类还没实现)
我设计的 猫咬狗后,必须去判断一下:狗是否被咬,觉得不太合理,后来又改了改弄得乱七八糟的
问:是我设计的不合理?还是可以有好的办法 实时监测自己是否被咬?希望大侠给点思路..........我写的乱七八糟代码如下:

C# code
namespace 多态之猫咬狗{//猫叫 完了 狗叫 猫咬了一口老鼠 老鼠叫 猫如果咬狗,狗也叫    class Program    {        static void Main(string[] args)        {            Dog d1 = new Dog();            Cat c1 = new Cat();            d1.OnBy += new BeiYaoDelegate(d1_Ontong);            c1.咬(d1, 2);            //d1.Is被咬();                     Console.ReadKey();        }        static void d1_Ontong()        {            Console.WriteLine("狗被咬了 汪!");        }    }    abstract class Animal    {        public int Blood { get; set; }        public abstract void shout();        public abstract void 咬(Animal an,int blood);        public event BeiYaoDelegate OnBy;    }    class Cat : Animal    {        public Cat()        {             Blood = 10;         }        //private BeiYaoDelegate _beiYaoDelegate;        //public event BeiYaoDelegate OnBy        //{        //    add { _beiYaoDelegate += value; }        //    remove { _beiYaoDelegate -= value; }        //}        public new event BeiYaoDelegate OnBy;        public override void shout()        {            Console.WriteLine("喵");        }        public override void 咬(Animal an,int blood)        {            an.Blood -= blood;            //if (Blood != 10 && _beiYaoDelegate != null)            //{            //    _beiYaoDelegate();            //}            if (an.OnBy !=null)            { an.OnBy(); }        }    }    class Dog : Animal    {         public Dog()        {              Blood = 10;             //while (true)//实时检测自己是否被咬 会死循环 不往下运行!             //{ Is被咬(); }         }         public new event BeiYaoDelegate OnBy;        public override void shout()        {            Console.WriteLine("旺");        }        public void Is被咬()        {            if (Blood != 10 && OnBy != null)//如何判断被咬            { OnBy(); }        }        public override void 咬(Animal an, int blood)        {            an.Blood -= blood;        }    }    class Mouse : Animal    {        public Mouse()        { Blood = 10; }        public override void shout()        {            Console.WriteLine("吱吱");        }        public override void 咬(Animal an, int blood)        {            throw new NotImplementedException();        }    }    public  delegate void BeiYaoDelegate();//被咬了!  }


[解决办法]
哪有什么实时,那都在满足一定条件下触发这个事件的
代码中就是如下
if (an.OnBy !=null)
{ an.OnBy(); }

读书人网 >C#

热点推荐