我在看杨中科老师的课程,里面有个“猫狗和耗子”的面试题:“猫叫 完了 狗叫 猫咬了一口老鼠 老鼠叫 猫如果咬狗,狗也叫”我想把它改成event 事件版的,我写了几个类:(Mouse类还没实现)
我设计的 猫咬狗后,必须去判断一下:狗是否被咬,觉得不太合理,后来又改了改弄得乱七八糟的
问:是我设计的不合理?还是可以有好的办法 实时监测自己是否被咬?希望大侠给点思路..........我写的乱七八糟代码如下: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();//被咬了! }
我设计的 猫咬狗后,必须去判断一下:狗是否被咬,觉得不太合理,后来又改了改弄得乱七八糟的
问:是我设计的不合理?还是可以有好的办法 实时监测自己是否被咬?希望大侠给点思路..........我写的乱七八糟代码如下: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(); }
{ an.OnBy(); }
错误 1 事件“多态之猫咬狗.Animal.OnBy”只能出现在 += 或 -= 的左边(从类型“多态之猫咬狗这句话会提示 如上错误