为何添加事件都要用 new

自由建客 2011-08-09 10:31:49
Query_PrevMonth_Menu.Click += new EventHandler(Query_PrevMonth);    // 典型的
Query_ThisMonth_Menu.Click += Query_ThisMonth; // 这个工作也正常啊

...全文
169 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigbaldy 2013-04-08
  • 打赏
  • 举报
回复
第二个只是编译器提供的简易写法,和第一个是一样的
自由建客 2013-04-08
  • 打赏
  • 举报
回复
委托对象并非函数,而是要把函数包装一下的,所以要新建。
沐秋 2013-04-08
  • 打赏
  • 举报
回复
C# 用new关键字声明实例,new过之后为实例分配运行空间,否则实例就不存在 纯属个人理解
自由建客 2013-04-08
  • 打赏
  • 举报
回复
委托和函数还是有区别的,毕竟不是一类东西。
ZhangNan20100811 2011-08-10
  • 打赏
  • 举报
回复
new出一个新的实例用它。
自由建客 2011-08-10
  • 打赏
  • 举报
回复
EventHandler 是一个类,是一种类型, Query_PrevMonth 本来就是这种类型的对象,还要 new 一个新的!蛋疼!还是第二种自然些。
namhyuk 2011-08-10
  • 打赏
  • 举报
回复
Query_PrevMonth_Menu.Click += delegate {……};
Query_PrevMonth_Menu.Click += (s, e) => {……};
也可以。
  • 打赏
  • 举报
回复
sp1234
回答的很清楚了

第二种写法会被net自动转化成第一种

net为了方便做出的一些处理机制,比如
属性{get;set;}什么的
潘少博 2011-08-10
  • 打赏
  • 举报
回复
把事件当做一个类来理解,所以要new出一个新的实例来。万物皆为类。
AK47 2011-08-10
  • 打赏
  • 举报
回复
学习一下。
  • 打赏
  • 举报
回复
至于说
Query_ThisMonth_Menu.Click += Query_ThisMonth;
这是c#的“语法糖”。.net中并没有这种写法,而c#编译器会把它生成为第一种代码写法。
  • 打赏
  • 举报
回复
很简单。因为每种Delegate都是一个类型,你不new一个Delegate类型的具体对象实例,怎么用类型啊?!

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧