关于事件,也很好理解 可以将delegate和event比作*,只是一种标示,delegate就相当于函数指针...

本文主要是介绍关于事件,也很好理解 可以将delegate和event比作*,只是一种标示,delegate就相当于函数指针...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

只要将委托的含义理解了,再看一个比较简单的例子,就很好理解事件了。

1定义事件

2使用委托定义事件

3订阅事件

4引发事件。

下面是转载!!

C#中的事件处理函数:

   C#中的事件处理函数是一个具有特定参数形式的委托对象,其形式如下:

public delegate void MyEventHandler( object sender,MyEventArgse);


其中第一个参数(sender)指明了触发该事件的对象,第二个参数(e)包含了在事件处理函数中可以被运用的一些数据。上面的MyEventArgs类是从EventArgs类继承过来的,后者是一些更广泛运用的类,如MouseEventArgs类、ListChangedEventArgs类等的基类。对于基于GUI的事件,你可以运用这些更广泛的、已经被定义好了的类的对象来完成处理;而对于那些基于非GUI的事件,你必须要从EventArgs类派生出自己的类,并将所要包含的数据传递给委托对象。下面是一个简单的例子:

public class MyEventArgs:EventArgs
{
publicstringm_id;
}


在事件处理函数中,你可以通过关键字event来引用委托对象,方法如下:

public event MyEventHandlerMyEvent;


现在,我们来创建两个类,通过这两个类我们可以知道C#完成事件处理的机制是如何工作的。在我们的实例中,A类将提供事件的处理函数,并在步骤3中创建委托对象同时将事件处理函数包含在其中,同上所述,事件处理函数的参数形式必须和委托对象的参数形式相一致。然后,A类将委托对象传递给B类。当B类中的事件被触发后,A类中的事件处理函数就相应的被调用了。下面是示例代码:

using System;
// 步骤1:声明委托对象
public delegate void MyHandler1( object sender,MyEventArgse);
public delegate void MyHandler2( object sender,MyEventArgse);

// 步骤2:创建事件处理函数的方法
class A
{
publicconststringm_id="ClassA";
publicvoidOnHandler1(objectsender,MyEventArgse)
{
Console.WriteLine(
"IaminOnHandler1andMyEventArgsis{0}",e.m_id);
}

publicvoidOnHandler2(objectsender,MyEventArgse)
{
Console.WriteLine(
"IaminOnHandler2andMyEventArgsis{0}",e.m_id);
}


//步骤3:创建委托对象,并事件处理函数包含在其中同时设置好将要触发事件的对象
publicA(Bb)
{
MyHandler1d1
=newMyHandler1(OnHandler1);
MyHandler2d2
=newMyHandler2(OnHandler2);
b.Event1
+=d1;
b.Event2
+=d2;
}

}


// 步骤4:通过委托对象(也就是触发事件)来调用被包含的方法
class B
{
publiceventMyHandler1Event1;
publiceventMyHandler2Event2;
publicvoidFireEvent1(MyEventArgse)
{
if(Event1!=null)
{
Event1(
this,e);
}

}

publicvoidFireEvent2(MyEventArgse)
{
if(Event2!=null)
{
Event2(
this,e);
}

}

}

public class MyEventArgs:EventArgs
{
publicstringm_id;
}

public class Driver
{
publicstaticvoidMain()
{
Bb
=newB();
Aa
=newA(b);
MyEventArgse1
=newMyEventArgs();
MyEventArgse2
=newMyEventArgs();
e1.m_id
="Eventargsforevent1";
e2.m_id
="Eventargsforevent2";
b.FireEvent1(e1);
b.FireEvent2(e2);
}

}

这篇关于关于事件,也很好理解 可以将delegate和event比作*,只是一种标示,delegate就相当于函数指针...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/472841

相关文章

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

spring @EventListener 事件与监听的示例详解

《spring@EventListener事件与监听的示例详解》本文介绍了自定义Spring事件和监听器的方法,包括如何发布事件、监听事件以及如何处理异步事件,通过示例代码和日志,展示了事件的顺序... 目录1、自定义Application Event2、自定义监听3、测试4、源代码5、其他5.1 顺序执行

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最