委托和事件

mirrorspace 2013-01-16 08:51:24
好:如题,
public delegate void NameChangeEventHandler();//定义一个委托类,用于事件的
public event NameChangeEventHandler NameChange;//定义一个事件

private void FirstName()//方法一 private void LastName()//方法二
{ {
; ;
}

1.事件加上方法
NameChange += new NameChangeEventHandler(FirstName);
NameChange += new NameChangeEventHandler(LastName);
2.事件加上方法
NameChange += FirstName;
NameChange += LastName;

这1和2两种情况都可以行,是为什么呢?
...全文
313 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mirrorspace 2013-01-20
  • 打赏
  • 举报
回复
感谢大家!!!!!
baizongjie 2013-01-18
  • 打赏
  • 举报
回复
语法问题 明白里面的意思就行
着魔 2013-01-18
  • 打赏
  • 举报
回复
语法的简化,最后实现方法是一样的,楼上各位都说过了
风骑士之怒 2013-01-18
  • 打赏
  • 举报
回复
引用 7 楼 wknight_IT 的回复:
看IL代码,是一样的啊 p.NameChange += new NameChangeEventHandler(FirstName); IL代码如下: C# code?123ldftn void ConsoleApplication1.Program::FirstName()newobj instance void ConsoleApplic……
编译器帮你干了这活
风骑士之怒 2013-01-18
  • 打赏
  • 举报
回复
看IL代码,是一样的啊 p.NameChange += new NameChangeEventHandler(FirstName); IL代码如下:

ldftn      void ConsoleApplication1.Program::FirstName()
newobj     instance void ConsoleApplication1.Program/NameChangeEventHandler::.ctor(object, native int)
callvirt   instance void ConsoleApplication1.Program::add_NameChange(class ConsoleApplication1.Program/NameChangeEventHandler)
p.NameChange += FirstName; IL代码如下:

ldftn      void ConsoleApplication1.Program::FirstName()
newobj     instance void ConsoleApplication1.Program/NameChangeEventHandler::.ctor(object, native int)
callvirt   instance void ConsoleApplication1.Program::add_NameChange(class ConsoleApplication1.Program/NameChangeEventHandler)
  • 打赏
  • 举报
回复
NameChange += FirstName;//VS自动给你加了一个new NameChangeEventHandler而已
mirrorspace 2013-01-18
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
本帖最后由 caozhy 于 2013-01-16 22:12:11 编辑 为什么 string s = "hello world"; 和 string s = new string("hello world".ToCharArray()); 都可以呢?
这个不难理解,因为都是字串啊,关键字是同一个,前一种语法是正常的,后一种是为了满足C#的纯面象对象,烦锁. 委托和事件确实是同一样东西吗,本质一样,取不同的名字,那究竟使用有哪些不同呢?
noisu 2013-01-18
  • 打赏
  • 举报
回复
编译器帮你做了 加new的工作
XBodhi. 2013-01-18
  • 打赏
  • 举报
回复
还可以这么写 好像

NameChange +=(s,e) =>.........

NameChange += delegate{ ......} 
ohkuy 2013-01-18
  • 打赏
  • 举报
回复
都一样,还有一种写法呢, 如果自己扩展一下,还可以有N种写法
threenewbee 2013-01-16
  • 打赏
  • 举报
回复
为什么
string s = "hello world";

string s = new string("hello world".ToCharArray());
都可以呢?
huang793807836 2013-01-16
  • 打赏
  • 举报
回复
没研究过CIL,参照《C#与.NET3.5高级程序设计》290页。 其实都是语法上的表现而已,只是使用起来方便,到了底层CIL都是一致的。 哪个简单用哪个!
sainmars 2013-01-16
  • 打赏
  • 举报
回复
做了一个简化 你的事件是委托类型的 委托定义了签名只要方法符合签名就可以通过委托实现 也可以说你的事件在订阅的时候只要是符合这个签名就可以被触发
  • 打赏
  • 举报
回复
语法糖而已。。。。到了IL都一样~~~~~~~~~~~~~~

110,536

社区成员

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

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

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