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

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

要求:

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();
} }

转载于:https://www.cnblogs.com/OhMonkey/archive/2013/06/10/3130793.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值