C# EventHandler 委托和EventHandler<TEventArgs> 委托
EventHandler 委托
定义
命名空间:
System
程序集:
System.Runtime.dll
表示将用于处理不具有事件数据的事件的方法。
C#复制
public delegate void EventHandler(object? sender, EventArgs e);
参数
sender
Object
事件源。
e
EventArgs
不包含事件数据的对象。
EventHandler<TEventArgs> 委托
定义
命名空间:
System
程序集:
System.Runtime.dll
表示当事件提供数据时将处理该事件的方法。
C#复制
public delegate void EventHandler<TEventArgs>(object? sender, TEventArgs e);
类型参数
TEventArgs
事件生成的事件数据的类型。
参数
sender
Object
事件源。
e
TEventArgs
包含事件数据的对象。
using System;namespace _24EventHandler委托
{class Program{static void Main(string[] args){Counter c = new Counter(new Random().Next(10));c.ThresholdReached += c_ThresholdReached;Console.WriteLine("press 'a' key to increase total");while (Console.ReadKey(true).KeyChar == 'a'){Console.WriteLine("adding one");c.Add(1);}}static void c_ThresholdReached(object sender, ThresholdReachedEventArgs e){Console.WriteLine("The threshold of {0} was reached at {1}.", e.Threshold, e.TimeReached);Environment.Exit(0);}}class Counter{private int threshold;private int total;public Counter(int passedThreshold){threshold = passedThreshold;}public void Add(int x){total += x;if (total >= threshold){ThresholdReachedEventArgs args = new ThresholdReachedEventArgs();args.Threshold = threshold;args.TimeReached = DateTime.Now;OnThresholdReached(args);}}protected virtual void OnThresholdReached(ThresholdReachedEventArgs e){EventHandler<ThresholdReachedEventArgs> handler = ThresholdReached;if (handler != null){handler?.Invoke(this, e);}}public event EventHandler<ThresholdReachedEventArgs> ThresholdReached;}public class ThresholdReachedEventArgs : EventArgs{public int Threshold { get; set; }public DateTime TimeReached { get; set; }}
}
注解
事件模型中的事件.NET Framework基于事件委托,该委托将事件连接到其处理程序。 若要引发事件,需要两个元素:
一个委托,它标识提供对事件的响应的方法。
(可选)保存事件数据的类(如果事件提供数据)。
委托是定义签名的类型,即方法的返回值类型和参数列表类型。 可以使用委托类型来声明一个变量,该变量可以引用与委托签名相同的任何方法。
事件处理程序委托的标准签名定义不返回值的方法。 此方法的第一个参数的类型为 ,引用 Object 引发 事件的实例。 其第二个参数派生自 类型 EventArgs 并保存事件数据。 如果事件不生成事件数据,则第二个参数只是字段 EventArgs.Empty 的值。 否则,第二个参数是从 派生的类型,它提供保存事件数据所需的任何 EventArgs 字段或属性。
委托 EventHandler 是一个预定义的委托,专门表示不生成数据的事件的事件处理程序方法。 如果事件确实生成数据,则必须使用泛型委托 EventHandler<TEventArgs> 类。
若要将事件与将处理事件的方法关联,请向事件添加委托的实例。 除非移除了该委托,否则每当发生该事件时就会调用事件处理程序。
EventHandler
EventHandler 委托 (System) | Microsoft Docs
C# EventHandler 委托和EventHandler<TEventArgs> 委托相关推荐
- C#委托之如何理解委托面试常见题:
面试常见题: 1.委托是什么?★☆ 2.为什么需要委托?★☆ 3.委托能用来做什么?★☆ 4.如何自定义委托★☆ 5-NET默认的委托类型有哪几种?★☆ 6.怎样使用委托?★★★ 7.多播委托是什么? ...
- 【转发】什么时候该用委托,为什么要用委托,委托有什么好处
好多人一直在问:什么时候该用委托,为什么要用委托,委托有什么好处.... 看完下面的文章你将茅塞顿开..(看不懂的直接TDDTDS) 概念虽然我不喜欢讲太多 我们直接先来YY 个场景:我很喜欢打游戏, ...
- 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托
委托 一.什么是委托? 将一个方法作为参数传递给另一个方法(参数类型为委托delegate). 声明一个委托类型. 委托所指向的函数必须跟委托具有相同的的签名(参数个数.参数类型.返回值一样). ...
- C# 委托 (一)—— 委托、 泛型委托与Lambda表达式
C# 委托 (一)-- 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992 版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此文可 ...
- 第一节:复习委托,并且通过委托的异步调用开启一个新线程和异步回调、异步等待。
一. 再谈委托 1. 委托是一个关键字为delegate的自定义类型,通过委托可以把方法以参数的形式传递给另外一个方法,实现插件式的开发模式: 同时调用委托的时候,委托所包含的所有方法都会被实现. 2 ...
- 第九节:委托和事件(1)(委托的发展历史、插件式编程、多播委托)
一. 委托的发展历史和基本用法 说起委托,每个人可能都会对他有不同的理解,结合实战中委托的使用,我对其理解是:委托和类一样,是用户的一个自定义类型,委托可以有参数.有返回值,委托的关键字是delega ...
- 第一节:复习委托,并且通过委托的异步调用开启一个新线程和异步回调、异步等待
一. 再谈委托 1. 委托是一个关键字为delegate的自定义类型,通过委托可以把方法以参数的形式传递给另外一个方法,实现插件式的开发模式: 同时调用委托的时候,委托所包含的所有方法都会被实现. 2 ...
- C语言中的函数指针、函数的直接/间接调用、C# 委托(自定义委托、内置泛型委托、委托的实例化、委托的一般使用(模板方法、回调方法)、泛型委托、多播委托、同步/异步使用委托)
文章目录 C语言中的函数指针 函数的直接调用与间接调用 Java中没有与委托对应的功能实体 C# 委托 C# 自定义委托类型 C# 内置泛型委托类型 委托的实例化 委托也支持泛型的使用 委托的一般使用 ...
- java eventhandler 触发_事件、委托、委托方法的总结(使用EventHandler)
在C#中,定义事件.委托.委托方法可以使用类库内的EventHandler泛型委托来定义事件.并根据该泛型委托定义实现方法: 同样您也可以自定义委托 来定义事件以及 根据自定义的委托来定义实现事件的方 ...
最新文章
- Java和js常用表达式
- ES 自动恢复分片的时候不恢复了是磁盘超过了85%,然后不恢复了 ES可以配置多个数据目录...
- mongo执行逻辑表达式_MongoDB 常用查询操作
- Flex与Javascript交互
- python简单笔记
- 计算机考试67,计算机等级考试(国家)-二级c机试模拟67.doc
- MongoDB的选举过程
- 传智播客 多继承以及MRO顺序 学习笔记
- bzoj1036 [ZJOI2008]树的统计Count
- 拓展SOUI中SImRichEdit控件的语音OLE控件(AudioOle)
- CS 61A FALL 2020 Project-cats
- SMBv3 BSoD 0day
- 世界上有没有正五面体?
- mysql的to char data_数据库中的to char
- Windows错误码
- java-之冒泡排序法
- UAP:SECURITY PROTOCOL IN/OUT Command
- java 多重继承的困境
- Winform中pictureBox控件SizeMode属性
- mysql主从复制、读写分离集群/etc/my.cnf配置文件
热门文章
- 【数据分析实战】基于python对Airbnb房源进行数据分析
- Java中常用WEB服务器和应用服务器
- Eclipse安装windowsBuilder插件制作图形化界面
- 2-1 公路村村通 (25 分)
- ITE IT6604E/AX HDMI1.4 接收器
- 1024程序员节,送18本技术书籍给大家,祝大家节日快乐
- 梦想创造可能——盘点微软 .NET 技术八年发展历程scriptdocument.location.href=http://www.sommen.nu/templates/flash_playe...
- java报表之JFreeChart_Java报表之JFreeChart
- “曾打地铺,只为 Twitter 2.0 的女高管被解雇”,马斯克:剩下的员工很快获得“非常重要”的奖励!...
- 人生三大陷阱:大意、轻信、贪婪