C#如何事件注册/委托用法问题

问题描述

C#如何事件注册/委托用法问题
在用事件注册和委托时,遇到了困惑。在button注册事件时,C#默认是这样的:
this.button1.Click += new System.EventHandler(this.button1_Click);
实际上这样也可以执行:
this.button1.Click += this.button1_Click;
那么这两种方法到底有什么区别?


为什么要加这个委托?在自定义委托和事件时,按Tab自动补齐时,有时出现下面两种格式的一种,怎么回事?
Control.DetailEvent += Control_DetailEvent;
Control.DetailEvent +=new Control_DetailEventHandler(Control_DetailEvent);

解决方案

本质上没有区别,
Control_DetailEvent 是执行方法(Method),而Control_DetailEventHandler是个委托类型(Delegate)
简单来说,委托是对一类同参数同返回类型方法的描述
使用 Control.DetailEvent += Control_DetailEvent,编译器会自动实例化一个Control_DetailEvent对应的Delegate类型。

解决方案二:
Control.DetailEvent += Control_DetailEvent;
Control.DetailEvent +=new Control_DetailEventHandler(Control_DetailEvent);
这两种写法都没错,而且没有区别,
Control.DetailEvent += Control_DetailEvent; 仅仅是简化的写法,实现机理就是
Control.DetailEvent +=new Control_DetailEventHandler(Control_DetailEvent);

如果你再学到匿名方法、lambda表达式等的话,还会有更简化的写法,但最终都是一回事。

时间: 2024-08-02 17:54:56

C#如何事件注册/委托用法问题的相关文章

JavaScript事件委托用法分析_javascript技巧

本文实例讲述了JavaScript事件委托用法.分享给大家供大家参考.具体分析如下: 一.点击页面任何部分触发事件 创建一个script1.js文件. 复制代码 代码如下: (function() {     eventUtility.addEvent(document, "click", function(evt) {         alert('hello');     }); }()); 页面部分. 复制代码 代码如下: <head> <meta http-e

事件注册与潜在隐患

首先看一段模拟代码   class EnterpriseComponent  {    public event EventHandler OnEvent;     ~EnterpriseComponent()    {      Console.WriteLine("EnterpriseComponent Destroy...");    }     public void DoEvent()    {      if (OnEvent != null)        OnEvent

谈谈C#中的事件注册和注销

由于.NET框架对消息循环机制进行了很好的封装,开发人员不再需要深入的了解Windows事件/消息实现的具体机制,也无需创建复杂的事件结构体和所谓的消息句柄.我们所要做的无非就是--1.使用重载运算符"+="注册一个事件:2.编写对于该事件的处理方法.(关于C#2.0中事件处理的相关介绍,请参阅我的文章:C#2.0的泛型代理和事件 :以一当百的快感 )  如此简单,以至于习惯了Win32编程的伙计们对此嗤之以鼻,讽之:"我们是开手排挡车的专业选手,你们.NET一族只能玩玩自动

C#中委托用法实例详解

  本文实例讲述了C#中委托用法.分享给大家供大家参考.具体分析如下: 这里演示了如何使用匿名委托来计算员工的薪水奖金.使用匿名委托简化了程序,因为无需再定义一个单独的方法. (-:The data for each employee is stored in an object containing personal details as well as a delegate that references the algorithm required to calculate the bon

JavaScript使用addEventListener添加事件监听用法实例

  本文实例讲述了JavaScript使用addEventListener添加事件监听用法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <!DOCTYPE html> <html lang="en"> <head> <title>This text is the title of the document</title

C#中委托用法

  本文实例讲述了C#中委托用法.分享给大家供大家参考.具体分析如下: 对于用户要查找的条件的千变万化,我们在写条件去查找时,是不可能一下写死的,那样,如果你写好了一个类让别人用,别人需要的不是那种查询,得去找你改条件. 那么我们能否让使用这个类的人自己定义一个规则(条件),直接传条件给你,你帮我查询出结果来,C#就可以用委托来解决,相应的java可以用接口来实现 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2

jquery事件preventDefault()方法用法实例

 这篇文章主要介绍了jquery事件preventDefault()方法用法,实例分析了preventDefault()方法的功能及使用技巧,需要的朋友可以参考下     本文实例讲述了jquery事件preventDefault()方法用法.分享给大家供大家参考.具体实现方法如下:   代码如下: <html> <head> <title>jquery事件:preventDefault()方法的使用</title> <script type=&quo

libevent (三) 事件注册与循环监听

在libevent中为了监听某种事件的发生,设置事件触发后的回调函数,也就是说对该事件注册到当前的IO模型中. 事件注册 事件初始化 使用`event_new`函数来对事件进行初始化. typedef void (*event_callback_fn)(evutil_socket_t, short, void *);/* 回调函数 */ struct event *event_new(struct event_base *base, evutil_socket_t fd, short what,

Javascript 事件注册机制参数覆盖问题

问题描述 诸位大神,最近小白我正在重构项目代码,我学JS刚好1年,水平只能算是还未入门.之前在跟导师交流的时候,有接触一下JAVA的东东,关于解藕方面也借鉴了JAVA的SPRING框架的方式.先上代码:首先在Controller基类里面定义注册机制的方法:_Controller.method("delegateEvents",function(){for(varkeyinthis.events){varmethodName=this.events[key];varmethodArr=t