定义CatShoutEventArgs类(继承EventArgs),用来在事件触发时传递数据(猫的名字):

    public class CatShoutEventArgs : EventArgs{private string name;public string Name{get { return name; }set { name = value; }}}

定义Cat类:

    public class Cat{private string name;public Cat() { }public Cat(string name){this.name = name;}public delegate void CatShoutEventHandler(object sender, CatShoutEventArgs args);//委托所代表的方法有两个参数public event CatShoutEventHandler CatShout;public void Shout(){Console.WriteLine("喵,我是{0}。",name);if (CatShout != null){CatShoutEventArgs e = new CatShoutEventArgs();//猫的名字e.Name = this.name;//当事件触发时,通知所有登记过的对象,并将发送通知的自己(sender:cat)//以及需要的数据(CatShoutEventArgs:Name)传递过去CatShout(this, e); }}}

定义Mouse类:

 public class Mouse{private string name;public Mouse() { }public Mouse(string name){this.name = name;}/// <summary>/// 逃跑的方法有两个参数,并且可以在显示时,说出老猫的名字/// </summary>/// <param name="sender"></param>/// <param name="args"></param>public void Run(object sender, CatShoutEventArgs args){Console.WriteLine("老猫{0}来了,{1}快跑!",args.Name,this.name);}}

最后Main方法里实例化一只猫和两只老鼠,注册并触发猫叫事件:

static void Main(string[] args){Cat cat = new Cat("Tom");Mouse mouse1 = new Mouse("Jerry");Mouse mouse2 = new Mouse("Jack");//将Mouse的Run方法(Run(object sender, CatShoutEventArgs args))通过实例化委托Cat.CatShoutEventHandler//登记到Cat的事件CatShout当中cat.CatShout += new Cat.CatShoutEventHandler(mouse1.Run);cat.CatShout += new Cat.CatShoutEventHandler(mouse2.Run);cat.Shout();Console.ReadKey();}

运行结果如下图:

程序完整代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace EventArgsDemo
{public class CatShoutEventArgs : EventArgs{private string name;public string Name{get { return name; }set { name = value; }}}public class Cat{private string name;public Cat() { }public Cat(string name){this.name = name;}public delegate void CatShoutEventHandler(object sender, CatShoutEventArgs args);//委托所代码的方法有两个参数public event CatShoutEventHandler CatShout;public void Shout(){Console.WriteLine("喵,我是{0}。",name);if (CatShout != null){CatShoutEventArgs e = new CatShoutEventArgs();//猫的名字e.Name = this.name;//当事件触发时,通知所有登记过的对象,并将发送通知的自己(sender:cat)//以及需要的数据(CatShoutEventArgs:Name)传递过去CatShout(this, e); }}}public class Mouse{private string name;public Mouse() { }public Mouse(string name){this.name = name;}/// <summary>/// 逃跑的方法有两个参数,并且可以在显示时,说出老猫的名字/// </summary>/// <param name="sender"></param>/// <param name="args"></param>public void Run(object sender, CatShoutEventArgs args){Console.WriteLine("老猫{0}来了,{1}快跑!",args.Name,this.name);}}class Program{static void Main(string[] args){Cat cat = new Cat("Tom");Mouse mouse1 = new Mouse("Jerry");Mouse mouse2 = new Mouse("Jack");//将Mouse的Run方法(Run(object sender, CatShoutEventArgs args))通过实例化委托Cat.CatShoutEventHandler//登记到Cat的事件CatShout当中cat.CatShout += new Cat.CatShoutEventHandler(mouse1.Run);cat.CatShout += new Cat.CatShoutEventHandler(mouse2.Run);cat.Shout();Console.ReadKey();}}
}

View Code

转载于:https://www.cnblogs.com/527289276qq/p/5349326.html

猫叫了,老鼠跑了!(复习委托和事件)相关推荐

  1. 猫叫人醒老鼠跑 C#的委托及事件

    昨天进行了一下培训,讲解了一下委托跟事件的应用,说实话这个东西听起来还是一头雾水,虽然学会怎么用,但是还没搞明白需要在什么时候用到这个,后来我们经理给我举了个例子,让我做一个经典的委托和事件的例子,就 ...

  2. Java猫叫老鼠跑人惊醒_面试题:猫叫、老鼠跑、人醒的一点看法

    这些天一直在面试中,做着不同的面试题,唉,悲催 上周做的一道面试题今天正好出现在园里的首页,看了一下这位同学的实现,基本上方向是对的,就是代码上细节没有注意,有一些错误,这里我就写一下我的理解 --- ...

  3. Java猫叫老鼠跑人惊醒_关于猫叫、老鼠逃跑、人被惊醒的程序设计

    题目是这样的:猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒. 要求: 1.要有联动性,老鼠和人的行为是被动的 2.考虑可扩展行,猫叫声可能会引起其他联动效应 看到这个程序设计题目,我的第一反应是用事件 ...

  4. 关于猫叫、老鼠逃跑、人被惊醒的程序设计

    题目是这样的:猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒. 要求: 1.要有联动性,老鼠和人的行为是被动的 2.考虑可扩展行,猫叫声可能会引起其他联动效应 看到这个程序设计题目,我的第一反应是用事件 ...

  5. CSharp(C#)语言_委托和事件区别详解

    委托和事件区别详解 委托和事件的概念 委托 事件 委托和事件的作用 委托 事件 委托和事件的区别 委托和事件的详细解答请看C#系列文章 委托和事件代码实践 委托 事件 总结 委托和事件的概念 委托   ...

  6. 观察者模式和委托实现 - 老鼠跑,猫叫,人醒

    老鼠跑,猫叫,人醒是典型的事件联动,解决此种情形,可以利用观察者模式或者事件委托来实现.利用设计模式时要考虑耦合,但利用事件委托的话,就不需要了.因为用委托的话,理解比较容易,这里没有单写,而是将委托 ...

  7. 一道事件委托面试题 - 猫叫老鼠跑主人醒

    /* 道事件委托面试题 - 猫叫老鼠跑主人醒 */using System;namespace CatCry {class MainClass{static void Main(string[] ar ...

  8. 【编程题】【Scratch三级】2019.06 猫咪抓老鼠游戏

    猫咪抓老鼠游戏 1. 准备工作 (1)保留小猫角色,添加"Mouse1": (2)默认白色背景. 2. 功能实现 (1)键盘上下左右键控制小猫上下左右移动: (2)老鼠出现在舞台随 ...

  9. 【电子学会】2019年09月图形化三级 -- 猫咪抓老鼠游戏

    猫咪抓老鼠游戏 1. 准备工作 (1)保留小猫角色,添加"Mouse1": (2)默认白色背景. 2. 功能实现 (1)键盘上下左右键控制小猫上下左右移动: (2)老鼠出现在舞台随 ...

  10. 如鹏网 net高级技术 第二章 委托和事件(复习)

    委托 委托是一种数据类型,可以声明委托类型变量. 委托是一种可以指向方法的数据类型. 声明委托的方式:delegate返回值类型 委托类型名(参数)   比如 delegate void MyDel( ...

最新文章

  1. 《MySQL技术内幕:InnoDB存储引擎》读书笔记
  2. Science | 化学合成文献数字化自动执行通用系统
  3. 服务器双系统切换快捷键,服务器双系统同时开
  4. python动态时钟代码_Python基础 用Python实现时钟
  5. 理解hasOwnProperty()的作用
  6. 缓存目录的区别getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()的作用
  7. 解决:关于Git无法提交 index.lock File exists的问题
  8. C++中类和对象的一些注意事项
  9. 存储过程的参数可以使用sql的函数
  10. python类库31[使用minidom读写xml]
  11. inventor中齿条怎么画_渐开线齿轮是怎么回事,图解6种齿轮加工工艺
  12. 物联网搜集大量数据协助制定业务策略 成为银行业竞争利器
  13. erp采购总监个人总结_ERP采购总监总结
  14. processing demo
  15. Ubuntu搭建BT服务器FTP服务器发布种子
  16. gmail 邮件客户端设置
  17. (已更新)成语小秀才小程序V2.0.14完整安装包+小程序前端
  18. oracle 修改字符集 修改为ZHS16GBK
  19. hi3798mv300救砖包_山东移动M301H数码视讯版-海思3798MV300芯片刷机包
  20. ajax异步超时,AjaxPro实现异步调用,解决浏览器假死及超时问题(示例代码)

热门文章

  1. Linux测试磁盘能力
  2. 频率学派与贝叶斯学派的区别
  3. MP3 Encoder for mac(MP3编码器)修复版
  4. mysql 忘记 root 密码
  5. docker-compose 学习:通过 image 指令指定镜像搭建一个简单LNMP
  6. 在FL Studio中编辑视频中的音频
  7. HashSet、LinkedHashSet和TreeSet三者区别与联系
  8. python3 + flask + sqlalchemy +orm(3):多对多关系
  9. 【Codevs 3115】高精度练习之减法
  10. linux 基础命令汇总