关于一个经典的委托和事件的问题 ------------------关于老鼠 猫 主人问题

具体的实现过程是
猫叫了一声,把主人吵醒了,老鼠吓跑了
主人醒后,老鼠被吓进了洞里,猫钻进了了被窝。

要求:

1.写三个类,分别表示老鼠,猫,主人
2.不能在这三个类中出现彼此的类型

①首先有一个主人类Master
class Master
{
//声明了一个委托,委托名为MasterWakeUpEventHandler,
//这个委托所能代表的方法是无参数,无返回值得方法。
public delegate void MasterWakeUpEventHandler();
//声明了一个对外公开的public事件MasterWakeUp
//它的事件类型是委托MasterWakeUpEventHandler
//表明事件发生时,执行被委托的方法。
public event MasterWakeUpEventHandler MasterWakeUp;
private string name;
public Master(string name)
{
this.name = name;
}
public void WakeUp()
{
Console.WriteLine("我是{0}是谁在叫",name);
//判断事件是否订阅
//如果没有订阅MasterWakeUp就为null,也不会引发事件
if (MasterWakeUp != null)
{
MasterWakeUp();
}
}
}
②定义一个老鼠Mouse类
class Mouse
{
private string name;
public Mouse(string name)
{
this.name = name;
}
public void Run()
{
Console.WriteLine("老猫来了,{0}快跑啊。",name);
}
public void 躲进洞里()
{
Console.WriteLine("主人生气了,{0}的回洞了",name);
}
}
③定义一个猫Cat类
class Cat
{
//声明了一个委托,委托名为CatShoutEventHandler,
//这个委托所能代表的方法是无参数,无返回值得方法。
public delegate void CatShoutEventHandler();
//声明了一个对外公开的public事件CatShout
//它的事件类型是委托CatShoutEventHandle
//表明事件发生时,执行被委托的方法。
public event CatShoutEventHandler CatShout;
private string name;
//构造函数
public Cat(string name)
{
this.name = name;
}
//定义了猫的一个Shout方法
public void Shout()
{
Console.WriteLine("喵,我是{0}",name);
//判断事件是否订阅
//如果没有订阅CatShout就为null,也不会引发事件
if (CatShout != null)
{
CatShout();
}
}
public void 躲进被窝()
{
Console.WriteLine("主人吼了一声,{0}躲进了被窝...",name);
}
}
④在Program类中
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat("猫猫");
Mouse mouse = new Mouse("鼠鼠");
Master master = new Master("人人");
//表示将Mouse的Run方法通过实例化委托Cat.CatShoutEventHandler登记到Cat的事件CatShout当中。
//new Cat.CatShoutEventHandler(mouse.Run)的含义是实例化一个委托,而委托的实例其实就是Mouse的Run方法。
//其中“+=”表示add_CatShout的意思
cat.CatShout += new Cat.CatShoutEventHandler(mouse.Run);
cat.CatShout +=new Cat.CatShoutEventHandler(master.WakeUp);
cat.Shout();
master .MasterWakeUp+=new Master.MasterWakeUpEventHandler(mouse.躲进洞里);
master.MasterWakeUp+=new Master.MasterWakeUpEventHandler(cat.躲进被窝);
master.WakeUp();
Console.ReadKey();
} }

posted @ 2013-06-10 15:45  帝都-十年  阅读(387)  评论(0编辑  收藏  举报