关于“事件”的一些回顾
有关于事件的概念呢,记得以前看过一个例子,关于猫逮老鼠的,就是说,老鼠进到一个房间里后,猫就开始逮老鼠。说老鼠不能直接告诉猫你来逮我吧,于是就通过一个监视器来通知猫,一旦猫看到老鼠就开始逮了,而这个监视器便是‘事件’。
例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EventDemo
{
class Program
{
static void Main(string[] args)
{
Cat c = new Cat();//实例一只猫
c.Name = "大脸猫";
//将猫的捉鼠动作绑定到事件上
CatchMouse.CatchEvent += (o,e) => {
c.Catch();
};
Mouse m=new Mouse();//实例化一只老鼠
m.Name = "蓝皮鼠";
m.RunToHome();//进入室内
CatchMouse.DoCatch();//回调猫的捕捉事件
Console.ReadLine();
}
}
class Cat
{
public string Name { set; get; }
public void Catch()
{
Console.WriteLine("逮住你啦!我是"+Name);
}
}
class Mouse
{
public string Name { set; get; }
public void RunToHome()
{
Console.WriteLine("进来喽!我是"+Name);
}
}
public class CatchMouse
{
public static event EventHandler<CatchEventArgs> CatchEvent;//定义一个事件
public static void DoCatch()//提供外部访问事件方法
{
CatchEvent(null,null);
}
}
public class CatchEventArgs : EventArgs//事件参数类
{
public string Name { set; get; }
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EventDemo
{
class Program
{
static void Main(string[] args)
{
Cat c = new Cat();//实例一只猫
c.Name = "大脸猫";
//将猫的捉鼠动作绑定到事件上
CatchMouse.CatchEvent += (o,e) => {
c.Catch();
};
Mouse m=new Mouse();//实例化一只老鼠
m.Name = "蓝皮鼠";
m.RunToHome();//进入室内
CatchMouse.DoCatch();//回调猫的捕捉事件
Console.ReadLine();
}
}
class Cat
{
public string Name { set; get; }
public void Catch()
{
Console.WriteLine("逮住你啦!我是"+Name);
}
}
class Mouse
{
public string Name { set; get; }
public void RunToHome()
{
Console.WriteLine("进来喽!我是"+Name);
}
}
public class CatchMouse
{
public static event EventHandler<CatchEventArgs> CatchEvent;//定义一个事件
public static void DoCatch()//提供外部访问事件方法
{
CatchEvent(null,null);
}
}
public class CatchEventArgs : EventArgs//事件参数类
{
public string Name { set; get; }
}
}
上面这个例子呢,利用到事件参数CatchEventArgs,如果我们打算向事件中传递参数,即可利用到这个参数类。
加入上面的例子,猫只能逮住5斤一下的老鼠,那么在触发事件时就需要让猫根据事件的参数来判断该不该去逮。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EventDemo
{
class Program
{
static void Main(string[] args)
{
Cat c = new Cat();
c.Name = "大脸猫";
CatchMouse.CatchEvent += (o,e) => {
if(e.MouseWeight<5)
c.Catch();
};
double weight = 5;
Mouse m=new Mouse();
m.Name = "蓝皮鼠";
m.Weight = weight;
m.RunToHome();
CatchMouse.DoCatch(weight);
Console.ReadLine();
}
}
class Cat
{
public string Name { set; get; }
public void Catch()
{
Console.WriteLine("逮住你啦!我是"+Name);
}
}
class Mouse
{
public string Name { set; get; }
public double Weight { set; get; }
public void RunToHome()
{
Console.WriteLine("进来喽!我是"+Weight+"斤重的"+Name);
}
}
public class CatchMouse
{
public static event EventHandler<CatchEventArgs> CatchEvent;
public static void DoCatch(double mouseWeight)
{
CatchEvent(null, new CatchEventArgs() { MouseWeight=mouseWeight });
}
}
public class CatchEventArgs : EventArgs
{
public double MouseWeight { set; get; }
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EventDemo
{
class Program
{
static void Main(string[] args)
{
Cat c = new Cat();
c.Name = "大脸猫";
CatchMouse.CatchEvent += (o,e) => {
if(e.MouseWeight<5)
c.Catch();
};
double weight = 5;
Mouse m=new Mouse();
m.Name = "蓝皮鼠";
m.Weight = weight;
m.RunToHome();
CatchMouse.DoCatch(weight);
Console.ReadLine();
}
}
class Cat
{
public string Name { set; get; }
public void Catch()
{
Console.WriteLine("逮住你啦!我是"+Name);
}
}
class Mouse
{
public string Name { set; get; }
public double Weight { set; get; }
public void RunToHome()
{
Console.WriteLine("进来喽!我是"+Weight+"斤重的"+Name);
}
}
public class CatchMouse
{
public static event EventHandler<CatchEventArgs> CatchEvent;
public static void DoCatch(double mouseWeight)
{
CatchEvent(null, new CatchEventArgs() { MouseWeight=mouseWeight });
}
}
public class CatchEventArgs : EventArgs
{
public double MouseWeight { set; get; }
}
}
DEMO:https://files.cnblogs.com/wengyuli/EventDemo.rar
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2008-08-11 CMU兰迪教授的最后一课