C# 入门(10) 事件(event)

C# 事件总线 Event Bus 事件总线:是对发布-订阅模式的一种实现,是一种集中式事件处理机制。它允许事件发送者(发布者)与事件接收者(订阅者)之间保持解耦,即它们不需要直接知道对方的存在,只需要通过事件总线进行通信。发布-订阅模式:是一种消息传递模式,消息发送者(称为发布者)不会将消息直接发送给特定的接收者。相反,发布者将发布的消息分类成不同的频道(Channel),不需要知道哪些消息接收者(称为订阅者)会存在或监听这些频道。首先,定义一个事件监听器接口,所有的事件监听器都需要实现这个接口。这个接口包含一个方法,用于处理事件。 阅读详情

C#的事件

参考书籍: 《C#图解教程》

  事件这东西呢,其实就是观察者模式。事件在很多框架里面都有,例如Andriod,QT5(信号槽),Cocos2d-x,Unity3d,一般的GUI如按钮,编辑文本,等等都是用事件的原理来响应程序的。


发布者(publisher)和订阅者(subscriber)

  • 发布者(publisher),发布某个事件的类或结构。
  • 订阅者(subscriber),注册在事件发生时得到通知的类或结构。
  • 事件处理程序(event handler),订阅者收到通知时要执行的方法。
  • 触发(raise)事件,就是发布通知(依次执行委托列表的方法)。

发布者和订阅者

  简单的说,如果我要实现点击一个按钮后,画布上就出现一张图片。那就是画布类(订阅者)有一个显示图片的方法(事件处理程序),把这个方法添加到按钮(发布者)的事件的委托里,当按钮被点击(触发事件),就执行事件里面的委托,这委托里面就会执行显示图片的方法。如下图。

namespace MyEvent
{
    //发布者
    class MyButton
    {
        //EventHandler是系统推荐的事件处理委托,也可以自己写。
        public event EventHandler ButtonClickedEvent;   

        public void OnButtonClicked()
        {             
            //触发事件,第一个参数是触发事件的对象的引用,第二个参数是用来传你要的处理数据。
            ButtonClickedEvent(this, null);
        }
    }

    //订阅者
    class MyCanvas
    {
        private string Picture = "i am a picture!";

        public MyCanvas(MyButton myBtn)
        {
            //订阅事件
            myBtn.ButtonClickedEvent += ShowPicture;
        }

        //事件处理程序,签名要和委托的前面匹配。
        void ShowPicture(object source,EventArgs e)
        {
            Console.WriteLine(Picture);
        }

    }


    class Program
    {
        static void Main()
        {
            MyButton myButton = new MyButton();
            MyCanvas myCanvas = new MyCanvas(myButton);

            myButton.OnButtonClicked();

            Console.ReadKey();
        }
    }
}

运行结果:i am a picture!

至于EventHandler这个系统的标准委托类型还有EventArgs传递数据类自己看书吧。《C#图解教程》P262。


事件访问器

  类似与属性,事件访问器有两个,add(+=)和remove(-=),同样有个叫value的隐式参数。
  

public event EventHandler Counted
{
    add
    {
        ...    //执行+=运算符代码
    }

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

相关推荐

C#事件(event)解析

事件(event)   事件类似于异常,因为它们都是由对象引发(抛出),我们可以提供代码来处理事件。单它们也有区别,最重要的区别是并没有与try...catch 类似的结构来处理事件,而必须订阅(subscribe)它们。订阅一个事件的含义是提供代码,在事件发生时执行这些代码,它们称之为事件处理程序。所以在实际编程中,就必须有时间发生者和时间处理者,初次之外还有它们活动的平台。事件发生者

liuguobo的专栏 5920

C# 事件(event)

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

weixin_47336109的博客 8336

C#【高级篇】 C# 事件(Event)

C#【高级篇】 C# 事件(Event)

星Yeah 的博客 1026

C#中的事件(Event)

什么是事件 事件基本上说是用户操作,如按键、点击、鼠标移动等等,或是一些提示信息,如系统生成的通知。 应用程序需要在事件发生时响应。事件是一种引用类型,实际上也是一种特殊的委托。通常,每个事件的发生都会产生发送方和接收方,发送方式指引发事件的对象,接收方则是指获取、处理事件。 事件定义的语法 访问修饰符 event 委托名 事件名 事件要与委托一起用。 由于在事件中使用了委托,因此需要在定义事件前先定义委托。 在定义事件后需要定义事件所使用的方法,并通过事件来调用委托。 基本案例: using System

QQ845264718 3095

[原创]用C++模拟C#的event机制

本文章为farproc.com站长袁晓辉(海洋)的原创文章,作者保留所有权利。如果转载,请务必注明来自www.farproc.com!! 作为一个C++程序员,学习C#应该不是一件很困难的事情,因为C#的许多特性都是从C++“继承”(不精确的说法)来的。但是C#作为一门全新的编程语言,它必然有自己的新特性,而这些C++中并不存在的新特性正是我们从C++转向C#的过程中必须认真重新学

farproc's blog 8184

Python驱动COMSOL自动化:从数据生成到DNN代理模型部署全流程解析

本文详细解析了如何利用Python驱动COMSOL实现全流程自动化,从参数化建模、批量仿真数据生成,到训练深度神经网络(DNN)代理模型并部署应用。该方案通过自动化闭环解放工程师生产力,并利用代理模型实现秒级性能预测,极大提升了多物理场仿真优化与设计探索的效率。

weixin_29041767的博客 210

C# 事件(Event)

C# 事件(Event) 事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些出现,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。事件是用于进程间通信。 通过事件使用委托 事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为...

kucoffee12的博客 687

基于Q-learning的无人机三维路径规划(含完整C++代码)

基于Q-learning的无人机三维路径规划(含完整C++代码)

weixin_54186646的博客 1万+

c#入门-事件

委托作为字段使用时,需要有专门的访问器。不能是属性。因为一旦被别人拿到了get访问器,它就可以在任何时候以任何次数调用委托。一旦别人拿到了set访问器,别人就可以无限制地把已有地委托设置为null。事件就是委托的专属访问器。和属性一样,只能作为类成员存在。和属性一样,本身不保存字段,可以以实例成员存在与接口中。

zms9110750的博客 1072

知识图谱本体建模之RDF、RDFS、OWL详解

(一)知识图谱本体建模之RDF、RDFS、OWL详解 1.语义网体系 知识图谱于2012年由Google提出,并不是新概念,而是由语义网络(Semantic Network)衍生而来。语义网络由相互连接的节点和边组成,节点表示概念或者对象,边表示他们之间的关系。RDF,RDFS与OWL都是基于语义网的知识表示框架,在节点和边的取值上做了约束,制定了统一标准,为多源数据的融合提供了便利。RDF,RDFS/OWL 属于语义网技术栈,它们的提出,使得语义网克服了语义网络的缺点。其语义网技术栈如下所示。 2.RD

周周的专栏 1万+

从零构建PEMFC仿真模型:MATLAB/Simulink中的模块化拆解与系统集成

本文详细介绍了如何在MATLAB/Simulink环境中从零构建质子交换膜燃料电池(PEMFC)仿真模型,包括电化学模型、气体供应系统和热管理系统的模块化实现。通过多物理场耦合技巧和系统集成策略,帮助工程师和研究者高效开发PEMFC控制策略,优化性能并实现实时仿真。

weixin_29294975的博客 360

C# 事件(event)

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

熊思雨的博客 7775

ABtest描述统计功效

我们在面试数据分析时,常常会问到如何确定样本量的问题,会有一个指标:统计功效(power),或者是1-β 统计功效会影响实验的可信度,甚至会影响实验所需的样本量,要了解统计功效,首先要理解两类统计错误 假如我们做了一个AB实验,且两组用户的数据均值为μ1和μ2,我们会有两个初始假设: H0:两个实验组的数据没有差别(μ1=μ2),这个假设也叫“零假设”,也叫原假设 H1:两个实验组之间的数据存在差别(μ1≠μ2),这个假设也叫“非零假设”,也叫备择假设 定义两类错误: 实验本身没有效应,但我们觉

qq_38134556的博客 901

C#事件Event

CLR里提到这是线程不安全的做法,因为当我们判断不为空后,准备执行时,另一个线程将从委托链将委托移除,此时变成了空,引发NullReferenceException异常。第二、三种做法都是线程安全的,因为它通过一个临时委托变量(委托链保存了所有委托),通过上一篇对委托链的了解,我们知道对委托链进行Combine/Remove实际都会创建一个新的数组对象,此时对temp没有影响。我们知道委托是用来包装回调函数的,它的本质是一个class,回调函数的签名必须与委托的签名一致。

GarFe的博客 1436

自锁电路设计

Hi,uu们,是不是经常要用到自锁电路,通常不是使用555芯片就是用比较器来做自锁,今天我们来简单看下自锁电路的设计.图1采用了比较器构建了一个自锁电路,采用低电平复位,当需要复位的时候志需要将反向端的二极管拉低一下即可,免去 三极管控制同相端和电源短接的麻烦。图1:比较器构建的自锁电路也可以使用555去构建,如下图2所示.图2:使用555构建的自锁电路工作原理见555的真值表,真值表如表1所示.表1:555电路真值表相对来说555还是比较贵,所以我就想能不能有个便宜的方法做个自锁电路,构建电路如下图3所示

weixin_43884675的博客 7066

ClickHouse集群扩容实战:用clickhouse-copier搞定数据迁移与分片重平衡

本文详细介绍了使用clickhouse-copier工具实现ClickHouse集群从3分片到5分片的平滑扩容实战。通过分片级并行处理、原子性保证等核心机制,该工具能高效完成数据迁移与分片重平衡,同时保持服务连续性。文章涵盖集群拓扑规划、表结构检查、迁移配置、执行监控及迁移后优化等关键步骤,为大数据量场景下的ClickHouse扩容提供完整解决方案。

weixin_29091837的博客 294

c# 事件(Event)机制

重新熟悉一下委托和事件。 通过事件使用委托 事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。 发布器(publisher) 是一个包含事件和委托定义的对象。事件和...

一颗偏执的心 1万+

银行业数据科学家的 6 条经验教训

原本希望在计算机科学、统计学和机器学习领域工作。运用新方法获得独特见解,实现一切自动化。简而言之,最终成了这个职业炒作的牺牲品。我想和你们分享一下。希望我们能够摆脱炒作,提高你对数据科学家工作的理解。

茶桁专栏 246

[C#]C# 事件(event)

事件是一种特殊的多播委托,仅可以从声明事件的类或结构中对其进行调用。类或对象可以通过事件向其他类或对象通知发生的相关事情。发送(或引发)事件的类称为“发布者”,接收(或处理)事件的类称为“订阅者”。本文主要介绍C# 事件(event)。

FL1768317420的博客 1148

IEM模型,地表粗糙度模拟

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# 事件Event

C#中的事件是基于委托的发布/订阅机制,具有封装性和安全性。事件只能在声明类内部触发,外部只能通过+=/-=订阅或取消订阅。通过示例展示了ToolMan类定义事件,LazyMan类订阅事件实现"带饭"功能,并指出直接调用事件会报错,需通过类方法触发。同时演示了水温报警和家庭开饭两个事件应用场景,说明Action委托的使用方式。事件机制有效实现了对象间的松耦合通信。

LZQqqqqo的博客 1150

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C# 有了委托(delegate)为什么还需要事件(event)?

delegate void dowork(); // 委托申明 class Baby{ public event dowork CryEvent; // 事件成员() public void Play() { System.Console.WriteLine("孩子在玩耍..."); Thread.Sleep(2000); ...

皮皮君的博客 2546

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C# event 事件

0.前言 事件是对象用于(向系统中的所有相关组件)广播已发生事情的一种方式。任何其他组件都可以订阅事件,并在事件引发时得到通知,在设计模式中叫做观察者模式。和委托类似,事件是后期绑定机制。用于定义事件以及订阅或取消订阅事件的语法是对委托语法的扩展。 1.事件的使用 在C# GUI程序中,事件处理是很常用的,比如C# WPF中一个按钮的点击,可以对应到一个事件处理方法: ...

龚建波 2023

C# 入门一一事件(event)

一、什么是事件 事件涉及两类角色——事件发布者和事件订阅者 事件发布者:是指触发事件的对象,发布消息。 事件订阅者:是指捕获事件并作出相应处理。 二、使用事件 我们先来查看一个完整的使用事件示例: 示例一: using System; using System.Collections.Generic; using System.Linq; using System.Text; n...

xuanyin235的专栏 1634
上一篇: C# 入门(9) 委托(delegate),匿名方法,Lambda表达式
下一篇: C# 入门(11) 接口(interface)
ChiLi_Lin
博客等级 码龄12年 760粉丝 184原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值