C#事件访问器

  我们可以通过为事件定义事件访问器,来控制事件运算符+=、-=运算符的行为

  有两个访问器:add和remove

  声明事件的访问器看上去和声明一个属性差不多

  下面示例演示了具有访问器的声明.两个访问器都有叫做value的隐式值参数,它接受实例或静态方法的引用

  public event EventHandler Elapsed

  {

  add

  {

  //... 执行+=运算符的代码

  }

  remove

  {

  //... 执行-=运算符的代码

  }

  }

  声明了事件访问器后,事件不包含任何内嵌委托对象.我们必须实现自己的机制来存储和移除事件的方法

  事件访问器表现为void方法,也就是不能使用会返回值的return语句

  完整示例:

  //声明一个delegate

  delegate void EventHandler();

  class MyClass

  {

  //声明一个成员变量来保存事件句柄(事件被激发时被调用的delegate)

  private EventHandler m_Handler = null;

  //激发事件

  public void FireAEvent()

  {

  if (m_Handler != null)

  {

  m_Handler();

  }

  }

  //声明事件

  public event EventHandler AEvent

  {

  //添加访问器

  add

  {

  //注意,访问器中实际包含了一个名为value的隐含参数

  //该参数的值即为客户程序调用+=时传递过来的delegate

  Console.WriteLine("AEvent add被调用,value的HashCode为:" + value.GetHashCode());

  if (value != null)

  {

  //设置m_Handler域保存新的handler

  m_Handler = value;

  }

  }

  //删除访问器

  remove

  {

  Console.WriteLine("AEvent remove被调用,value的HashCode为:" + value.GetHashCode());

  if (value == m_Handler)

  {

  //设置m_Handler为null,该事件将不再被激发

  m_Handler = null;

  }

  }

  }

  }

  class Program

  {

  static void Main(string[] args)

  {

  MyClass obj = new MyClass();

  //创建委托

  EventHandler MyHandler = new EventHandler(MyEventHandler);

  MyHandler += MyEventHandle2;

  //将委托注册到事件

  obj.AEvent += MyHandler;

  //激发事件

  obj.FireAEvent();

  //将委托从事件中撤销

  obj.AEvent -= MyHandler;

  //再次激发事件

  obj.FireAEvent();

  Console.ReadKey();

  }

  //事件处理程序

  static void MyEventHandler()

  {

  Console.WriteLine("This is a Event!");

  }

  //事件处理程序

  static void MyEventHandle2()

  {

  Console.WriteLine("This is a Event2!");

  }

  }

时间: 2024-10-29 05:13:26

C#事件访问器的相关文章

事件访问器

如Button的例子所示,大多数情况下事件的声明都省略了事件访问声明.什么情况下使用事件访问声明呢?答案是:如果每个事件的存储开销太大,我们就可以在类中包含事件访问声明,按私有成员的规则存入事件句柄列表. 访问器的声明包括两种:添加访问器声明(add-accessor-declaration)和删除访问器声明(remove-accessor-declaration). 访问器声明之后跟随相关执行代码的语句块.在添加访问器声明后的代码需要执行添加事件句柄的操作,在删除访问器声明后的代码需要执行删除

应用事件探查器优化SQL Server系统

概述 当你的SQL Server数据库系统运行缓慢的时候,你或许多多少少知道可以使用SQL Server Profiler(中文叫SQL事件探查器)工具来进行跟踪和分析.是的,Profiler可以用来捕获发送到SQL Server的所有语句以及语句的执行性能相关数据(如语句的read/writes页面数目,CPU的使用量,以及语句的duration等)以供以后分析.但本文并不介绍如何使用Profiler 工具,而是将介绍如何使用read80trace(有关该工具见后面介绍)工具结合自定义的存储过

什么是Winows系统事件查看器

  所谓的"事件"(Event.也称"日志"),是指操作系统组件.服务或应用程序发生审核范围内的行为时,就会被系统的Event Log服务自动记录下来并保存到事件日志中.查看这些事件需要一个专门的工具,这个工具就叫做"事件查看器".系统管理员通过事件中记录的内容,可以快速判断出系统的状态.错误发生的原因.用户的使用状态,等等. 以windows xp为例,可以使用如下几种方法调出"事件查看器"窗口: 步骤1:依次点击"

事件查看器如何使用

  一.事件查看器相关知识 1.事件查看器 事件查看器是 Microsoft 操作系统工具,事件查看器相当于一本厚厚的系统日志,可以查看关于硬件.软件和系统问题的信息,也可以监视 操作系统中的安全事件.有三种方式来打开事件查看器: (1)单击"开始"-"设置"-"控制面板"-"管理工具"-"事件查看器",打开事件查看器窗口 (2)在"运行"对话框中手工键入"%SystemRoo

Windows Server 2008修复系统事件查看器4201错误

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   Windows Server 2008修复系统事件查看器启动不能时出现的4201错误解决方法如下: 方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限.这是最简单

Windows 事件查看器(收集)

原文:Windows 事件查看器(收集) 事件查看器相当于一本厚厚的系统日志,可以查看关于硬件.软件和系统问题的信息,也可以监视 Windows 的安全事件 提示:除了可以在"控制面板→管理工具"中找到"事件查看器"的踪影外,也可以在"运行"对话框中 手工键入"%SystemRoot%\system32\eventvwr.msc /s"打开事件查看器窗口. 1. 应用程序日志 包含由应用程序或系统程序记录的事件,主要记录程序运

《ANTLR 4权威指南》——2.5 语法分析树监听器和访问器

2.5 语法分析树监听器和访问器 ANTLR的运行库提供了两种遍历树的机制.默认情况下,ANTLR使用内建的遍历器访问生成的语法分析树,并为每个遍历时可能触发的事件生成一个语法分析树监听器接口(parse-tree listener interface).监听器非常类似于XML解析器生成的SAX文档对象.SAX监听器接收类似startDocument()和endDocument()的事件通知.一个监听器的方法实际上就是回调函数,正如我们在图形界面程序中响应复选框点击事件一样.除了监听器的方式,我

Zend Framework 2.0事件管理器(The EventManager)入门教程_php实例

概述 EventManger是一个为以下使用情况设计的组件: 复制代码 代码如下: 实现简单的主题/观察者模式 实现面向切面的设计 实现事件驱动的架构 基本的架构允许你添加和解除指定事件的侦听器,无论是在一个实例基础还是一个共享的集合:触发事件:终止侦听器的执行. 快速入门 通常,你将会在一个类中创建一个EventManager. 复制代码 代码如下: use Zend\EventManager\EventManagerInterface; use Zend\EventManager\Event

《ANTLR 4权威指南 》一2.5 语法分析树监听器和访问器

2.5 语法分析树监听器和访问器 ANTLR的运行库提供了两种遍历树的机制.默认情况下,ANTLR使用内建的遍历器访问生成的语法分析树,并为每个遍历时可能触发的事件生成一个语法分析树监听器接口(parse-tree listener interface).监听器非常类似于XML解析器生成的SAX文档对象.SAX监听器接收类似startDocument()和endDocument()的事件通知.一个监听器的方法实际上就是回调函数,正如我们在图形界面程序中响应复选框点击事件一样.除了监听器的方式,我