猫叫人醒老鼠跑 C#的委托及事件
昨天进行了一下培训,讲解了一下委托跟事件的应用,说实话这个东西听起来还是一头雾水,虽然学会怎么用,但是还没搞明白需要在什么时候用到这个,后来我们经理给我举了个例子,让我做一个经典的委托和事件的例子,就是猫叫人醒老鼠跑。
首先很简单,需要定义猫,人跟老鼠三个类,分别命名为Cat,People,Mouse,在这里我还写了一个接口,里面写了一个void Action(),用以实现多态,People和Mouse两个类继承了这个接口并实现,然后定义一个委托public delegate void Scream(), 返回类型为void,然后在Cat类中定义一个事件public event Scream scream,用来接下里的事件绑定。接下来要写一个虚拟类,来作为一个观察者,而Cat类是作为一个被观察者,当Cat类中的方法被调用以后,触发绑定在事件里面的方法,这里我写了一个虚类来扮演观察者的角色,Cat类做为被观察者,当Cat类被调用呢,观察者告诉另外两个类Cat类已经被调用,然后这两个类各自实现相应的方法,也就是说观察者观察到猫叫了一声以后告诉人和老鼠,人就醒过来,而老鼠就开始跑,这就是同一件事情引发的不同角色的不同动作,而虚类的构造函数方法来绑定虚方法Action()。虚类的代码如下:
public abstract class Observer : IScream
{
protected Cat cat{get;set;}
public Observer(Cat cat)
{
this.cat = cat;
this.cat.scream += Action;
}
public abstract void Action();
}
人跟老鼠的类继承自这个虚类,通过重写虚方法Action来达到实现多态的效果,然后通过base来调用父类的构造函数,人跟老鼠类的代码如下:
class Person:Observer
{
public override void Action()
{
Console.WriteLine("主人醒来了");
}
public Person(Cat cat) : base(cat)
{
}
}
class Mouse : Observer
{
public override void Action()
{
Console.WriteLine("老鼠跑了");
}
public Mouse(Cat cat) : base(cat)
{
}
}
这样定义好了以后,最后只要调用Cat类的方法就能实现预期效果,整体代码如下:
public delegate void Scream();
public class Cat
{
public event Scream scream;
public void Action()
{
Console.WriteLine("猫叫了一声");
scream();
}
}
public abstract class Observer : IScream
{
protected Cat cat{get;set;}
public Observer(Cat cat)
{
this.cat = cat;
this.cat.scream += Action;
}
public abstract void Action();
}
class Mouse : Observer
{
public override void Action()
{
Console.WriteLine("老鼠跑了");
}
public Mouse(Cat cat) : base(cat)
{
}
}
class Person:Observer
{
public override void Action()
{
Console.WriteLine("主人醒来了");
}
public Person(Cat cat) : base(cat)
{
}
}
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
Person p = new Person(cat);
Mouse m = new Mouse(cat);
cat.Action();
Console.ReadLine();
}
}
转载于:https://www.cnblogs.com/TerryLinHao/archive/2011/07/13/2104249.html
猫叫人醒老鼠跑 C#的委托及事件相关推荐
- 2011New_C#中的代理与事件_猫叫人醒鼠跑
(原创:http://hi.baidu.com/grayworm) 代理与事件是DotNet的两个重要概念,但好多朋友感觉没有这两个概念照样能够进行常规的DotNet开发.其实深入理解这两个概念对Do ...
- Java猫叫老鼠跑人惊醒_面试题:猫叫、老鼠跑、人醒的一点看法
这些天一直在面试中,做着不同的面试题,唉,悲催 上周做的一道面试题今天正好出现在园里的首页,看了一下这位同学的实现,基本上方向是对的,就是代码上细节没有注意,有一些错误,这里我就写一下我的理解 --- ...
- Java猫叫老鼠跑人惊醒_关于猫叫、老鼠逃跑、人被惊醒的程序设计
题目是这样的:猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒. 要求: 1.要有联动性,老鼠和人的行为是被动的 2.考虑可扩展行,猫叫声可能会引起其他联动效应 看到这个程序设计题目,我的第一反应是用事件 ...
- 关于猫叫、老鼠逃跑、人被惊醒的程序设计
题目是这样的:猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒. 要求: 1.要有联动性,老鼠和人的行为是被动的 2.考虑可扩展行,猫叫声可能会引起其他联动效应 看到这个程序设计题目,我的第一反应是用事件 ...
- 观察者模式和委托实现 - 老鼠跑,猫叫,人醒
老鼠跑,猫叫,人醒是典型的事件联动,解决此种情形,可以利用观察者模式或者事件委托来实现.利用设计模式时要考虑耦合,但利用事件委托的话,就不需要了.因为用委托的话,理解比较容易,这里没有单写,而是将委托 ...
- 一道事件委托面试题 - 猫叫老鼠跑主人醒
/* 道事件委托面试题 - 猫叫老鼠跑主人醒 */using System;namespace CatCry {class MainClass{static void Main(string[] ar ...
- 【编程题】【Scratch三级】2019.06 猫咪抓老鼠游戏
猫咪抓老鼠游戏 1. 准备工作 (1)保留小猫角色,添加"Mouse1": (2)默认白色背景. 2. 功能实现 (1)键盘上下左右键控制小猫上下左右移动: (2)老鼠出现在舞台随 ...
- 【电子学会】2019年09月图形化三级 -- 猫咪抓老鼠游戏
猫咪抓老鼠游戏 1. 准备工作 (1)保留小猫角色,添加"Mouse1": (2)默认白色背景. 2. 功能实现 (1)键盘上下左右键控制小猫上下左右移动: (2)老鼠出现在舞台随 ...
- (译)C#/.NET中的委托与事件
C#/.NET中的委托与事件 下载本文的示例源码 目录 译者的话 概述 委托(Delegates) 直接调用方法-不用委托 最基本的委托 调用静态方法 ...
最新文章
- SQL删除重复数据方法
- Win7 PPTP/L2TP设置详细图解教程
- c# 在DataTable的第一列(指定列)的前面添加一列
- 如何配置三层交换机创建VLAN 3
- 家用电器如何计算功率和消耗的度数
- android 自定义actionbar,如何让android的actionbar浮动且透明
- docker保存对容器的修改
- JavaScript高级程序设计笔记 事件冒泡和事件捕获
- 【动态规划笔记】状压dp:蓝桥 矩阵计数 (二进制枚举)
- 游戏蛮牛Unity 用户文档
- 性能分析之排队论应用
- osx86 10.4.3 BF1118 的界面
- 三自由度机械臂的三维设计
- chrome浏览器恢复书签方法
- linux逻辑分区如何创建,linux 创建扩展分区以及逻辑分区
- Base64 加解密工具类
- Centos6连接网络配置
- 为什么要使用dubbo
- Object-based superresolution land cover Mapping From Remotely sensed imagery
- word表格无法跨页断开,内容被隐藏到了页面下方,如何解决?