委托和事件
好:如题,
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两种情况都可以行,是为什么呢?
[解决办法]
语法糖而已。。。。到了IL都一样~~~~~~~~~~~~~~
[解决办法]
做了一个简化
你的事件是委托类型的 委托定义了签名只要方法符合签名就可以通过委托实现
也可以说你的事件在订阅的时候只要是符合这个签名就可以被触发
[解决办法]
没研究过CIL,参照《C#与.NET3.5高级程序设计》290页。
其实都是语法上的表现而已,只是使用起来方便,到了底层CIL都是一致的。
哪个简单用哪个!
[解决办法]
本帖最后由 caozhy 于 2013-01-16 22:12:11 编辑 为什么
string s = "hello world";
和
string s = new string("hello world".ToCharArray());
都可以呢?
[解决办法]
NameChange += FirstName;//VS自动给你加了一个new NameChangeEventHandler而已
[解决办法]
看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)
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)
[解决办法]
语法问题
明白里面的意思就行
[解决办法]
都一样,还有一种写法呢,
如果自己扩展一下,还可以有N种写法
[解决办法]
还可以这么写 好像
NameChange +=(s,e) =>.........
NameChange += delegate{ ......}