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> 委托相关推荐

  1. C#委托之如何理解委托面试常见题:

    面试常见题: 1.委托是什么?★☆ 2.为什么需要委托?★☆ 3.委托能用来做什么?★☆ 4.如何自定义委托★☆ 5-NET默认的委托类型有哪几种?★☆ 6.怎样使用委托?★★★ 7.多播委托是什么? ...

  2. 【转发】什么时候该用委托,为什么要用委托,委托有什么好处

    好多人一直在问:什么时候该用委托,为什么要用委托,委托有什么好处.... 看完下面的文章你将茅塞顿开..(看不懂的直接TDDTDS) 概念虽然我不喜欢讲太多 我们直接先来YY 个场景:我很喜欢打游戏, ...

  3. 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托

    委托 一.什么是委托? 将一个方法作为参数传递给另一个方法(参数类型为委托delegate).   声明一个委托类型. 委托所指向的函数必须跟委托具有相同的的签名(参数个数.参数类型.返回值一样). ...

  4. C# 委托 (一)—— 委托、 泛型委托与Lambda表达式

    C# 委托 (一)-- 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992 版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此文可 ...

  5. 第一节:复习委托,并且通过委托的异步调用开启一个新线程和异步回调、异步等待。

    一. 再谈委托 1. 委托是一个关键字为delegate的自定义类型,通过委托可以把方法以参数的形式传递给另外一个方法,实现插件式的开发模式: 同时调用委托的时候,委托所包含的所有方法都会被实现. 2 ...

  6. 第九节:委托和事件(1)(委托的发展历史、插件式编程、多播委托)

    一. 委托的发展历史和基本用法 说起委托,每个人可能都会对他有不同的理解,结合实战中委托的使用,我对其理解是:委托和类一样,是用户的一个自定义类型,委托可以有参数.有返回值,委托的关键字是delega ...

  7. 第一节:复习委托,并且通过委托的异步调用开启一个新线程和异步回调、异步等待

    一. 再谈委托 1. 委托是一个关键字为delegate的自定义类型,通过委托可以把方法以参数的形式传递给另外一个方法,实现插件式的开发模式: 同时调用委托的时候,委托所包含的所有方法都会被实现. 2 ...

  8. C语言中的函数指针、函数的直接/间接调用、C# 委托(自定义委托、内置泛型委托、委托的实例化、委托的一般使用(模板方法、回调方法)、泛型委托、多播委托、同步/异步使用委托)

    文章目录 C语言中的函数指针 函数的直接调用与间接调用 Java中没有与委托对应的功能实体 C# 委托 C# 自定义委托类型 C# 内置泛型委托类型 委托的实例化 委托也支持泛型的使用 委托的一般使用 ...

  9. java eventhandler 触发_事件、委托、委托方法的总结(使用EventHandler)

    在C#中,定义事件.委托.委托方法可以使用类库内的EventHandler泛型委托来定义事件.并根据该泛型委托定义实现方法: 同样您也可以自定义委托 来定义事件以及 根据自定义的委托来定义实现事件的方 ...

最新文章

  1. Java和js常用表达式
  2. ES 自动恢复分片的时候不恢复了是磁盘超过了85%,然后不恢复了 ES可以配置多个数据目录...
  3. mongo执行逻辑表达式_MongoDB 常用查询操作
  4. Flex与Javascript交互
  5. python简单笔记
  6. 计算机考试67,计算机等级考试(国家)-二级c机试模拟67.doc
  7. MongoDB的选举过程
  8. 传智播客 多继承以及MRO顺序 学习笔记
  9. bzoj1036 [ZJOI2008]树的统计Count
  10. 拓展SOUI中SImRichEdit控件的语音OLE控件(AudioOle)
  11. CS 61A FALL 2020 Project-cats
  12. SMBv3 BSoD 0day
  13. 世界上有没有正五面体?
  14. mysql的to char data_数据库中的to char
  15. Windows错误码
  16. java-之冒泡排序法
  17. UAP:SECURITY PROTOCOL IN/OUT Command
  18. java 多重继承的困境
  19. Winform中pictureBox控件SizeMode属性
  20. mysql主从复制、读写分离集群/etc/my.cnf配置文件

热门文章

  1. 【数据分析实战】基于python对Airbnb房源进行数据分析
  2. Java中常用WEB服务器和应用服务器
  3. Eclipse安装windowsBuilder插件制作图形化界面
  4. 2-1 公路村村通 (25 分)
  5. ITE IT6604E/AX HDMI1.4 接收器
  6. 1024程序员节,送18本技术书籍给大家,祝大家节日快乐
  7. 梦想创造可能——盘点微软 .NET 技术八年发展历程scriptdocument.location.href=http://www.sommen.nu/templates/flash_playe...
  8. java报表之JFreeChart_Java报表之JFreeChart
  9. “曾打地铺,只为 Twitter 2.0 的女高管被解雇”,马斯克:剩下的员工很快获得“非常重要”的奖励!...
  10. 人生三大陷阱:大意、轻信、贪婪