(四十五)C#编程基础复习——C#事件(Event)
在C#中,事件可以看作是用户的一系列操作,例如点击键盘的某个按键、单击/移动鼠标等,当事件发生时我们可以针对事件做出一系列的响应,例如退出程序、记录日志等等。C#中线程之间的通信就是使用事件机制实现的。
事件需要在类中声明和触发,并通过委托与事件处理程序关联。事件可以分为发布器和订阅器两个部分,其中发布器是一个包含事件和委托的对象,事件和委托之间的联系在定义在这个类中,发布器类的对象可以触发事件,并使用委托通知其他的对象;订阅器则是一个接收事件并提供事件处理程序的对象,发布器类中的委托调用订阅器中的方法(事件处理程序)。
有关事件我们需要注意以下几点:
- 发布器确定何时触发事件,订阅器确定对事件作出何种响应;
- 一个事件可以拥有多个订阅器,同时订阅器也可以处理来自多个发布器的事件;
- 没有订阅器的事件永远不会触发;
- 事件通常用于定义针对用户的操作,例如单击某个按钮;
- 如果事件拥有多个订阅器,当事件被触发时同步调用所有的事件处理程序;
- 在.NET类库中,事件基于EventHandler委托和EventArgs基类。
若要在类中声明一个事件,首先需要为该事件声明一个委托类型,例如:
public delegate void delegate_name(string status);
然后使用event关键字来声明事件本身,如下所示:
//基于上面的委托定义事件
public event delegate_name event_name;
上例中定义了一个名为delegate_name和名为event_name的事件,当事件触发的时候调用委托。示例代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _007
{
internal class Program
{
static void Main(string[] args)
{
//实例发布器类
PublisherDemo e = new PublisherDemo();
//实例订阅器类
SubscriberDemo v = new SubscriberDemo();
e.MyEvent += new PublisherDemo.MyEntrust(v.printf);
e.SetValue("C#语言中文网");
Console.ReadKey();
}
}
/***************************发布器类**************************/
public class PublisherDemo
{
private string value;
public delegate void MyEntrust(string str);
public event MyEntrust MyEvent;
public void SetValue(string s)
{
value = s;
MyEvent(value);//触发事件
}
}
/***************************订阅器类**************************/
public class SubscriberDemo
{
public void printf(string str)
{
Console.WriteLine(str);
}
}
}
分类:
C#基础
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签