C# Event浅析

C#中的事件(event) 事件模型(event model) 事件模型的5个组成部分 事件拥有者(event source)(类对象)(有些书将其称为事件发布者) 事件成员(event)(事件拥有者的成员)(事件成员就是事件本身,事件不会主动发生,其只会在事件拥有者的内部逻辑的触发下发生。) 事件响应者(event subscriber)(类对象)(有些书将其称为事件订阅者) 事件处理器(event handler)(事件的响应者的成员)(根据拿到的事件参数/信息对事件进行处理) 事件订阅(委托类型) 举个栗子:“裁判员开枪,运 阅读详情


前言

Event事件机制是C#的重要特性,它可以实现诸如点击功能,多线程应用等多个场景中。


一、Event是什么?

Event本质是基于delegate实现的,是delegate 的一种实现。采用订阅者/发布者机制,订阅者即事件接收方,发布者为事件发布方。事件定义在发布者中,当发布者调用某种方法时,事件即触发,订阅者收到被触发事件,即调用相应方法。

二、Event定义

1. .Net 提供的定义EventHandler

代码如下(示例):

public delegate void EventHandler<TEventArgs>(object? sender, TEventArgs e);

以上定义是.Net提供的,可以直接在自己的代码中使用。之前已经说过事件是基于delegate实现的,这里可以看到定义了一个名为EventHandler的委托。这里要讲解一下EventArgs类,这个类是包含事件需要的数据信息的。它可以被自定义类继承。TEventArgs即泛型,代表用户的EventArgs继承子类,sender 是发布者,一般为this.

然后定义event

public event EventHandler<TEventArgs> eventHandler;

事件定义后,eventHandler就可以在任何时候调用

eventHandler.Invoke(this, new TEventArgs)

2.自定义委托

.Net也支持自定义事件委托,这里我们定义一个没有参数的委托
代码如下(示例):

public delegate void CallEventHandler();

然后定义event

public event CallEventHandler Call;

三、事件绑定

将订阅者方法绑定到事件即完成。

Call+=User.Method();
C# 事件(Event)详解 定义委托类型:声明事件的委托类型。定义事件:使用event关键字声明事件。触发事件:通过委托触发事件。//声明委托类型//声明事件//触发事件的方法MyEvent?");//触发事件//事件处理方法//订阅事件//触发事件• 事件是基于委托的,提供了一个更严格的方式来管理方法的调用,尤其适用于需要通知和异步操作的场景。• 事件允许发布-订阅模式,使得多个对象能够订阅并响应特定的事件。 阅读详情

相关推荐

C# 事件(Event)

C# 事件(Event)是一种成员,用于将特定的事件通知发送给订阅者。事件通常用于实现观察者模式,它允许一个对象将状态的变化通知其他对象,而不需要知道这些对象的细节。基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。C# 中使用事件机制实现线程间的通信。event+=-=

xiaoaque的博客 1252

C# 事件(event)

事件是一种特殊的多播委托,仅可以从声明事件的类(或派生类)或结构(发布服务器类)中对其进行调用。如果其他类或结构订阅该事件,则在发布服务器类引发该事件时,将调用其事件处理程序方法可以将事件标记为publicprivateprotectedinternal或。这些访问修饰符定义该类的用户访问该事件的方式。事件在我们平时开发中用的还是比较多的,大部分时候用在框架中,比如 Winform 中的 Timer 组件,如下面代码,Timer.Elapsed 就是一个事件//实例化Timer类,

熊思雨的博客 7775

nginx 网络框架浅析

文章目录nginx 事件驱动框架浅析nginx主循环框架 ngx_cycle_snginx事件 ngx_event_snginx连接 ngx_connection_snginx事件模块 ngx_event_module_sepoll事件模块 ngx_epoll_modulenginx 对过期事件的处理定时器事件nginx惊群处理和负载均衡算法惊群效应和负载不均衡的由来惊群的处理负载均衡算法 ngi...

Odew 1544

C# 事件(event)

在C#中,事件是通过event关键字声明的。事件通常基于委托类型,委托定义了事件的签名,即事件的参数和返回类型。事件的声明通常放在类的内部,作为类的一个成员。// 声明事件,基于MyEventHandler委托类型在这个示例中,我们定义了一个名为MyEventHandler的委托类型,它接受一个object类型的源对象和一个EventArgs类型的参数。然后,在MyClass类中,我们使用event关键字声明了一个名为MyEvent的事件,该事件基于MyEventHandler委托类型。

weixin_47336109的博客 8330

点击率预测的贝叶斯平滑

概述 电商领域中经常需要计算或预测一些转化率指标,如最典型的CTR(点击率,Click-Through Rate)。这些转化率可以是模型的预测值,也可以作为模型的特征(feature)使用。以商品点击率预测为例,CTR的值等于点击量(Click)除以曝光量(Impression或Exposure)。以rr表示点击率, r=CI(1)r=\frac{C}{I} \tag{1}. 但在实际应

小平子的专栏 3万+

2022-8-3----Android10.0(MTK)-----SN_Writer 写入 SN 注意事项

SN_Writer、写入SN

qq_854189624的博客 1万+

浅析C#之——Observer, Delegate和event(3)

接下来说一下event event的简述: event是C#特有的一个修饰符关键字,语法本质是进行一个转换,实现对delegate的进一步封装。   event的简单使用方法: 之前介绍过了delegate,那么event的语法其实很简单,就只要在之前的Observer_delegate.cs中的delegate申明行中加入一个event修饰符即可,其它地方一个字都不用改就能编译通过运行...

warlock333的专栏 244

VirtualBox增强功能安装全指南:从下载到配置复制粘贴功能

本文详细介绍了VirtualBox增强功能的完整安装与配置流程,重点解决了虚拟机与主机间复制粘贴、文件拖放等核心协作难题。通过分步指南和故障排查,帮助用户在不同操作系统(如Windows、Linux)中实现无缝集成,提升虚拟化工作效率与体验。

weixin_29206669的博客 417

浅析C#之——Observer, Delegate和event(1)

这些天除了项目之外花时间最多的就是在研究C#里的Delegate和event......此外,还在写文章的时候无意中研究了一下Observer设计模式...其实说研究也惭愧,浅尝辄止而已,但还是想把学到的写出来分享一下,第一次写这类文章,面向广大的和我一样的低阶菜鸟级程序猿,还望大师们海涵加指点………………关键词:字段:通常指类对象中的成员变量,一般为私有。属性:C#中较为独特的一种……签名?不知...

warlock333的专栏 278

即梦 AI 全功能零基础详细教程(纯技术版)

即梦 AI 是一款多模态 AI 生成工具,主打文本生成视频、图片生成视频、角色一致性生成、音画同步等核心功能,依托自研 AI 视觉模型,实现从文本 / 图片 / 音频素材输入,到高清视频、图像内容输出的全流程 AI 创作,支持短视频、短剧、创意素材等多场景创作,具备操作门槛低、生成效率高、画面可控性强的技术特点。@为工具内置引用指令,作用是锁定指定素材 / 角色,强制 AI 按照该素材的核心特征生成内容,无额外付费、解锁要求,免费使用。剧本拆分:将短剧拆分为单镜头(15 秒内 / 个)

2501_92061023的博客 5793

深入解读WT软件湍流强度计算与分析

深入解读WT软件湍流强度计算与分析

weixin_46713695的博客 1019

读书笔记 C#事件event浅析(一)

在C#中,所谓event事件,就是一种特殊的委托。如果要声明事件,首先就要声明一个相对应的委托类型。按照流程来说,事件相当于委托类型往上升了一级似的,我是这样认为的。 //1.先声明委托类型 public delegate void MethodDel(string param); //2.再次声明事件 publ...

dietisi8980的博客 159

基于应用谱减法进行语音去噪的算法

在上述代码中首先通过读取语音信号和噪声信号,将两个信号都转换为频域信号,然后计算出语音信号在各频率下的功率谱和噪声信号在各频率下的功率谱,并基于此计算信噪比,接着根据信噪比计算出阈值,并将低于阈值的能量对应的频段进行清零操作,最终实现去噪处理,最后将处理后的信号转换回时域信号。该算法采用谱减法进行降噪处理,能有效地去除语音信号中的噪声,但是在实际应用中,该方法也存在一些问题,如会对语音信号的高频部分产生影响,所以需要在应用过程中进行适当的调整。

weixin_50547796的博客 192

浅析C#之——Observer, Delegate和event(2)

接下来说一下Delegate 先介绍一下Delegate类: Delegate——委托,是C#中对于函数指针进行封装后的对象,因为C#和JAVA一样都不允许直接使用指针这种高效但危险的东西,所以就用Delegate对象将其封装了起来以增加其使用的安全性;此外,比起直接使用字段,使用对象会更为方便,因为有了对象的封装后,就可以在对象内部预设需要的方法,为外部的调用增添许多便利。 创建委托时,d...

warlock333的专栏 208

【AIGC】大模型面试高频考点09-大模型Agent框架

聚焦AIGC专业技术分享

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 1964

一台NAS两个系统:飞牛nas上完美运行群晖DSM?(飞牛nas+群晖nas套娃安装实操)

想在飞牛NAS上体验群晖DSM系统?💡 本文详细记录了飞牛nas上部署群晖的完整过程,从镜像转换到系统安装,每一步都有详细说明 🖥️,让你在不增加硬件成本的情况下,轻松实现一套硬件、多种系统的灵活部署 ✅

XiaoqiangClub的博客 2361

浅析C# 中object sender与EventArgs e

浅析C# 中object sender与EventArgs e 一、了解C#中的预定义事件处理机制 在写代码前我们先来熟悉.net框架中和事件有关的类和委托,了解C#中预定义事件的处理。 EventArgs是包含事件数据的类的基类,用于传递事件的细节。 EventHandler是一个委托声明如下 public delegate void EventHandler( object sender , EventArgs e )

LV_Q的专栏 873

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

浅析 event-loop 事件轮询

原文出自:https://www.pandashen.com 浏览器中的事件轮询 JavaScript 是一门单线程语言,之所以说是单线程,是因为在浏览器中,如果是多线程,并且两个线程同时操作了同一个 Dom 元素,那最后的结果会出现问题。所以,JavaScript 是单线程的,但是如果完全由上至下的一行一行执行代码,假如一个代码块执行了很长的时间,后面必须要等待当前执行完毕,这样的效率是非...

github_38140984的博客 813

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C#算法一道面试题浅析

C#算法一道面试题浅析 2010-03-25  来自:优快云 Blog  字体大小:【大 中 小】 摘要:C#算法一道面试题向大家介绍了在面试中有可能会碰到的一道面试题,那么本文就用C#算法为你解答。<br />    C#算法一道面试题:程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。<br />    了解了题目之后让我们首先来看看C#算法程序的执行:public delegate void SubEventHandler();   public abstract class Subject

rise51的专栏 624

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

浅析C#的事件处理和自定义事件

一、了解C#中的预定义事件处理机制    在写代码前我们先来熟悉.net框架中和事件有关的类和委托,了解C#中预定义事件的处理。    EventArgs是包含事件数据的类的基类,用于传递事件的细节。    EventHandler是一个委托声明如下         public delegate void EventHandler( object sender , EventAr

672

Unity/C#基础复习(5) 之 浅析观察者、中介者模式在游戏中的应用与delegate原理...

参考资料 【1】 《Unity 3D脚本编程 使用C#语言开发跨平台游戏》陈嘉栋著 【2】 @张子阳【C#中的委托和事件 - Part.1】 http://www.tracefact.net/tech/009.html 【3】 @张子阳【C#中的委托和事件 - Part.2】 http://www.tracefact.net/tech/029.html 【4】 @毛星云【《Effect...

weixin_30919571的博客 704

浅析Java与C#的事件处理机制

      Java与C#的事件处理都是实现了事件源-事件响应者机制,但又不完全相同。Java实现的是一种事件源与事件响应者两级实体对象方式,这里的事件响应者也是事件监听者,而C#实现的是一种事件源-代理-事件响应者三级实体对象方式。下面就这两种方式来具体说明。Java事件处理  从概念上讲,事件是一种在"源对象"和"监听者对象"之间,某种状态发生变化的传递机制。事件有许多不同的用途,例如

586

浅析C#的事件处理和自定义事件[object sender , EventArgs e]

浅析C#的事件处理和自定义事件 一、了解C#中的预定义事件处理机制    在写代码前我们先来熟悉.net框架中和事件有关的类和委托,了解C#中预定义事件的处理。    EventArgs是包含事件数据的类的基类,用于传递事件的细节。    EventHandler是一个委托声明如下         public delegate void EventHandler( objec

yeyuqi的专栏 852

浅析如何用C#.NET做屏幕截图软件以及注册全局快捷键(下)

续:浅析如何用C#.NET做屏幕截图软件以及注册全局快捷键(上) 下面来说第三种方法:模拟PrintScreen按键,访问Clipboard来获得屏幕截图,继而执行截取操作。1、模拟PrintScreen按键为我们省去了很多代码,但刚开始也给我带来了很大的费解,假如你想通过button_click事件调用API来模拟按下PrintScreen键,然后通过Clipboard.GetImage()去...

weixin_30788239的博客 195

abstract修饰符浅析

<br />C#语言有很多值得学习的地方,这里我们主要介绍C# abstract修饰符,包括介绍通常用于强制继承类必须实现某一成员。等方面。<br />C# abstract修饰符是什么意思?<br />C# abstract修饰符可以用于类、方法、属性、事件和索引指示器(indexer),表示其为抽象成员 abstract 不可以和 static 、virtual 一起使用声明为 abstract 成员可以不包括实现代码,但只要类中还有未实现的抽象成员(即抽象类),那么它的对象就不能被实例化,通常用于强制

自由人生 1351
上一篇: ToString()和 implicit operator string的区别
下一篇: Event实例应用 汽车销售与顾客
CSharpIsDog
博客等级 码龄5年 0粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值