C#事件的订阅与触发
来源:互联网 发布:高达 知乎 编辑:程序博客网 时间:2024/06/06 03:36
C#有关事件的使用-进阶版
用猫和老鼠的示例
一、简单的情况,无参数订阅事件
//定义一个事件委托public delegate void mcEventHandler();//定义一个猫类class Cat { string cName; //定义一个猫叫事件 public event mcEventHandler CatCryEvent; public Cat(string name) { cName = name; } //当猫叫时候,触发事件 public void Cry() { Console.WriteLine(cName+"来了"); Console.ReadLine(); //触发事件 CatCryEvent(); } } //定义一个鼠类 class Mouse { public string mName; //在构造函数中进行订阅 public Mouse(Cat cat) { //订阅事件的两种形式 cat.CatCryEvent += Run; cat.CatCryEvent += new mcEventHandler(See); } private void Run() { Console.WriteLine("猫来了,"+mName+"先走一步"); } private void See() { Console.WriteLine("看看猫还在不在"); Console.ReadLine(); } } //主函数中实例化对象 class Program { static void Main(string[] args) { Cat cat1 = new Cat("Tom"); Mouse m1 = new Mouse(cat1); //调用函数,以触发猫叫事件 cat1.Cry(); } }
执行结果如下:
二、带有参数的事件订阅
首先定义一个传递参数的类,可以是EventArgs类的派生类(继承该类),也可以是string、int这种简单类,或者是其他自定义类型
这里定义一个CryEventArgs类传递参数
class CryEventArgs:EventArgs { //存储一个字符串 public string CatName { get; set; } }
接下来设计Cat类和Mouse类
class Cat { string cName; public event mcEventHandler CatCryEvent; //定义带有参数的事件,此处CryEventArgs可以为其他简单类,如是,下面订阅的函数的签名需要相应地改变 public event EventHandler<CryEventArgs> CatCryEvent1; public Cat(string name) { cName = name; } public void Cry() { Console.WriteLine(cName+"来了"); Console.ReadLine(); //用这个保存参数 CryEventArgs e = new CryEventArgs(); e.CatName = cName; //触发事件 //CatCryEvent(); CatCryEvent1(this, e); } } class Mouse { public Mouse(Cat cat) { //订阅事件的两种形式 //cat.CatCryEvent1 += Run; cat.CatCryEvent1 += new EventHandler<CryEventArgs>(Run); } private void Run(object sender,CryEventArgs e) { if(e.CatName=="Tom") { Console.WriteLine("别怕,是Tom这只傻猫"); Console.ReadLine(); } else { Console.WriteLine("快跑啊,是其他猫!"); Console.ReadLine(); } } } //主函数,模拟事件发生 public static void Main() { Cat c1 = new Cat("Tom"); Cat c2 = new Cat("Ben"); //两只老鼠,分别见到两只猫 Mouse m = new Mouse(c1); Mouse m2 = new Mouse(c2); c1.Cry(); Console.WriteLine("//-----------------而另一边---------------------//"); c2.Cry(); }
结果如下图
“`
2 0
- C#事件的订阅与触发
- 事件、订阅与触发(一)
- C# 事件 订阅与发布
- C#触发按钮的事件
- c# 订阅事件
- c# 关机的时候触发的事件
- C#中自定义事件的触发
- C# 中panel的mousewheel事件触发
- C# panel的mousewheel事件触发
- c# Gridview 点击checkbox 触发的事件
- C#中的委托、事件及事件的订阅
- C#中的事件触发
- C#触发事件
- C#触发事件
- C#中的触发事件
- C#中的触发事件
- 如何在需要的时候通过命令行触发事件来运行SSRS的报表订阅
- c# 与java 相同实现 自定义事件的触发及监听
- Python 实现文本文件多路归并排序
- Android数据持久化数据存储
- javaExcel文件上传和下载
- [作业报告]第5次C++作业-数组
- 《算法导论(第3版)》读书笔记(一)算法基础
- C#事件的订阅与触发
- Java接口修饰符详解-可以修饰接口的修饰符
- Opencv for Python 学习笔记 2.1 摄像头
- 关于 EntityNotFoundException: Unable to find Person with id 11
- ScrollView嵌套RecyclerView滑动冲突
- 学习hibernate的血泪史
- 影像组学下(Radiomic)的生存分析基本概念及统计分析
- Spring基础总结
- C++作业5