2 wyf86 wyf86 于 2016.04.28 11:42 提问

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);

2个回答

lieaf
lieaf   2016.05.03 10:29

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

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

u012758945
u012758945   2016.04.28 13:22

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C#事件与委托,事件与回调的用法区别
事件包括:事件发送者、事件接收者和事件处理程序。 关于事件,我们首要知道的是事件的发送者必须知道发送什么类型的事件,以及相关 的事件参数。而事件的接收者必须了解其事件的处理方法必须使用的返回类型和参数 事件的发送者和事件的接收者都只关注事件而不是对方,这样对象就只需考虑自己,而不用 考虑其他对象。 例如:足球运动员踢球射门时,产生一个击球事件,但他并不用关心守门员是谁,他 只要
C#之委托和事件
我想,读者们可能看过一部电影叫《全民目击》,在电影中,富豪林泰婚期将至,准新娘却惨死地下停车场,林泰的富二代女儿林萌萌成为最大嫌疑人,林泰不惜重金聘请国内顶级律师周莉为女儿辩护,而公诉方却是十多年一直追查林泰的童涛。随着法庭质证的深入,罪案真相却越来越扑朔迷离。所有人都深陷迷局,真相隐遁在迷雾之中。一如电影的主题,“人的一生,总有些东西比命还重要。”心灵的救赎,更发人深省。在电影中,林泰需要打官司
C# 委托和事件 练习
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; /* * 委托与事件练习 * * 表、响铃、按钮 * * 表时间从0开始,走到6就要响铃 * 响铃后输入n按回车,模拟按掉闹铃。 * 参考资料:http
c#如何取得事件注册的方法
这个问题来自论坛,原文为如何判断事件已经被注册过? 用反射取出事件绑定的委托实例,然后用GetInvocationList就可以得到所有注册的方法了。代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using S
C# 中的委托和事件(详解) ....
C# 中的委托和事件        委托和事件在 .NET Framework 中的应用非常广泛,然而,较好地理解委托和事件对很多接触 C# 时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里堵得慌,浑身不自在。本章中,我将由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.NET Framework 中的委托和事件、
C#自定义控件-事件-委托
在组件编程中对事件的理解是十分重要的,C# 中的“事件”是当对象发生某些有趣的事情时,类向该类的客户提供通知的一种方法。与事件联系最为紧密的,个人认为是委托.委托可以将方法引用封装在委托对象内。为了弄清组件-事件-委托三者的关系,本人用实际的例子来谈谈自己的理解。 理解C#编程中的组件-事件-委托     首先创建一个Windows控件项目,添加如下控件样板:     当事件触发时,
c#·委托&事件
委托:类似于C++中的函数指针,封闭了具有相同特征和返回类型的方法,实现事件回调机制   委托声明:访问修饰字 delegate 返回类型 委托名称 ([参数列表]) 实例化委托:委托类型 实例名称 = new 委托类型(表达式);其中表达式可以是:引用的类静态方法名、引用的类实例的实例方法名、另一个委托 委托调用:[名称限定.]委托实例名([参数列表])
C# 委托delegate与事件Event的用法和相关知识
什么是事件?事件有哪些?怎么用事件? 一、什么是事件? 事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动、输入值改变等等,或者是一些出现,如系统生成的通知。应用程序需要在事件发生时响应事件。 比较常用的有:窗体加载事件,鼠标事件,键盘事件,值改变事件,每个事件都有相应的操作响应。 二、事件有哪些? 在C#的命名空间System下,有个EventArgs类,它
C#中委托的+=和-=深入研究 委托的多次注册
无返回值的委托,你给它注册多少个方法,它就执行多少个方法,而有返回值的委托,同样注册多少个方法就执行多少个方法,但返回的是最后一个方法的返回值。 += 大家都知道委托都继承自System.MulticastDelegate,而System.MulticastDelegate又继承自System.Delegate,可以通过+=为委托注册多个方法。那么他们是否都执行了呢?执行的结果又是
C#中委托、事件和回调函数的理解
C# 委托 事件 回调