事件2 (标准 EventHandler)

  • EventHandler: 能提供一个对于所有事件和事件处理器都通用的签名,只允许两个参数,(而不是各自都有不同签名)

    • Object sender , //用来保存除非时间的对象引用,由于为object类型的,所以可以匹配任何类型的参数
    • EventArgs e , //用来保存状态信息,(或用户传递数据,需继承该类)

      namespace System

      {

      // Summary:

      // Represents the method that will handle an event.

      //

      // Parameters:

      // sender:

      // The source of the event.

      //

      // e:

      // An System.EventArgs that contains the event data.

      //

      // Type parameters:

      // TEventArgs:

      // The type of the event data generated by the event.

      [Serializable]

      public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e); //注意这个是模板

      }

      ? ?
      ?

    • EventArgs

      namespace System

      {

      // Summary:

      // System.EventArgs is the base class for classes containing event data.

      [Serializable]

      [ComVisible(true)]

      public class EventArgs

      {

      // Summary:

      // Represents an event with no event data.

      public static readonly EventArgs Empty;

      ? ?
      ?

      // Summary:

      // Initializes a new instance of the System.EventArgs class.

      public EventArgs();

      }

      }

    • 扩展EventArgs来传递数据

      ? ?
      ?

      /////////////////////////////////////////////////////////////////

    • 示例:

      public class IncrementerEventArgs : EventArgs // Custom class derived from EventArgs

      {

      public int IterationCount { get; set; } // Stores an integer

      }

      ? ?
      ?

      class Incrementer

      {

      public event EventHandler<IncrementerEventArgs> CountedADozen;

      ? ?
      ?

      public void DoCount()

      {

      IncrementerEventArgs args = new IncrementerEventArgs();

      for ( int i=1; i < 100; i++ )

      if ( i % 12 == 0 && CountedADozen != null )

      {

      args.IterationCount = i;

      CountedADozen( this, args );

      }

      }

      }

      ? ?
      ?

      class Dozens

      {

      public int DozensCount { get; private set; }

      ? ?
      ?

      public Dozens( Incrementer incrementer )

      {

      DozensCount = 0;

      incrementer.CountedADozen += IncrementDozensCount;

      }

      ? ?
      ?

      void IncrementDozensCount( object source, IncrementerEventArgs e )

      {

      Console.WriteLine( "Incremented at iteration: {0} in {1}",

      e.IterationCount, source.ToString() );

      DozensCount++;

      }

      }

      ? ?
      ?

      class Program

      {

      static void Main()

      {

      Incrementer incrementer = new Incrementer();

      Dozens dozensCounter = new Dozens( incrementer );

      ? ?
      ?

      incrementer.DoCount();

      Console.WriteLine( "Number of dozens = {0}",

      dozensCounter.DozensCount );

      }

      }

    • ?
时间: 2024-10-13 22:52:44

事件2 (标准 EventHandler)的相关文章

事件的标准模式

摘自http://www.cnblogs.com/willick/p/4172174.html,仅供参考学习 .NET框架为事件编程定义了一个标准模式,设定这个标准是为了让.NET框架和用户代码保持一致.System.EventArgs是标准模式的核心,它是一个没有任何成员,用于传递事件参数的基类,首先定义EventArgs: 1 public class PriceChangeEventArgs : System.EventArgs { 2 public readonly decimal ol

委托、Lambda表达式、事件系列07,使用EventHandler委托

谈到事件注册,EventHandler是最常用的. EventHandler是一个委托,接收2个形参.sender是指事件的发起者,e代表事件参数. □ 使用EventHandler实现猜拳游戏 使用EventHandler实现一个猜拳游戏,每次出拳,出剪刀.石头.布这三者的其中一种. 首先抽象出一个被观察者,其中提供了事件,提供了执行事件的方法. public class FistGame { public string FistName { get; set; } public event

事件委托 EventHandler

事件就是当对象或类状态发生改变时,对象或类发出的信息或通知.发出信息的对象或类称为"事件源",对事件进行处理的方法称为"接收者",通常事件源在发出状态改变信息时,它并不知道由哪个事件接收者来处理.这就需要一种管理机制来协调事件源和接收者,C++中通过函数指针来完成的.在C#中事件使用委托来为触发时将调用的方法提供类型安全的封装 事件的声明 1.声明一个委托public delegate void EventHandler(object sender, System.

Android RecyclerView单击、长按事件标准实现:基于OnItemTouchListener + GestureDetector

?? Android RecyclerView单击.长按事件:基于OnItemTouchListener + GestureDetector标准实现 Android RecyclerView虽然拥有ListView绝大多数的功能,但Android RecyclerView却没有实现像ListView那样的点击事件.长按事件的标准实现方式,我在附录文章1中介绍的方式,实现了典型的RecyclerView的item点击事件,大致的思路是通过为RecyclerView的ViewHolder添加View

C#高级知识点概要(1) - 委托和事件

作者:linybo 要成为大牛,必然要有扎实的基本功,不然时间再长项目再多也很难有大的提升.本系列讲的C# 高级知识点,是非常值得去撑握的,不仅可以让你写代码时游刃有余,而且去研究和学习一些开源项目时,也不会显得那么吃力了. 希望大家记住,这里讲的所有的知识点,不仅仅是了解了就可以了,还要会灵活用,一定要多思考,撑握其中的编程思想. 本文讲的是委托和事件,这两个词可能你早就耳熟能详,但你是否真正撑握了呢? 本系列讲的C#高级知识点都是要求开发时能达到可以徒手写出来的水平(不依赖搜索引擎.找笔记等

C#学习(一):委托和事件

预备知识 在学习委托和事件之前,我们需要知道的是,很多程序都有一个共同的需求,即当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知. 而发布者/订阅者模式可以满足这种需求.简单来说,在这种模式中,发布者定义了一系列程序的其他部分可能感兴趣的事件.其他类可以"注册",以便再这些事件发生时发布者可以通知它们.这些订阅者类通过向发布者提供一个方法来"注册"以获取通知.当事件发生时,发布者"触发事件",然后执行订阅者提交的所有事件.

MSDN搬运 之 [事件]

在发生其他类或对象关注的事情时,类或对象可通过事件通知它们.发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为“订户”. 在典型的 C# Windows 窗体或 Web 应用程序中,可订阅由控件(如按钮和列表框)引发的事件.可使用 Visual C# 集成开发环境 (IDE) 来浏览控件发布的事件,选择要处理的事件.IDE 会自动添加空事件处理程序方法和订阅事件的代码.有关更多信息,请参见如何:订阅和取消订阅事件(C# 编程指南). 事件概述 事件具有以下特点: 发行者确定何时引发

.NET基础拾遗(4)委托、事件、反射与特性

Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 一.委托基础 1.1 简述委托的基本原理 委托这个概念对C++程序员来说并不陌生,因为它和C++中的函数指针非常类似,很多码农也喜欢称委托为安全的函数指针.无论这一说法是否正确,委托的的确确实现了和函数指针类似的功能,那就是提供了程序回调指定方法的机制. 在委托内部,包含了一个指向某个方法的指针(这一点上委托实现机制和C++的函数指针一致),为何称其

[ASP.NET MVC 大牛之路]02 - C#高级知识点概要(1) - 委托和事件

在ASP.NET MVC 小牛之路系列中,前面用了一篇文章提了一下C#的一些知识点.照此,ASP.NET MVC 大牛之路系列也先给大家普及一下C#.NET中的高级知识点.每个知识点不太会过于详细,但足矣.要深入研究还需要去查看更多的专业资料. 要成为大牛,必然要有扎实的基本功,不然时间再长项目再多也很难有大的提升.本系列讲的C# 高级知识点,是非常值得去撑握的,不仅可以让你写代码时游刃有余,而且去研究和学习一些开源项目时,也不会显得那么吃力了. 希望大家记住,这里讲的所有的知识点,不仅仅是了解