欢迎来到天天文库
浏览记录
ID:8808992
大小:66.50 KB
页数:3页
时间:2018-04-08
《delegate与event不得不说的关系》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、delegate与event不得不说的关系~先来看一段代码://////事件类///publicclassEventClass{//////Go委托//////publicdelegatevoidGo(stringnam);//////事件委托///publiceventGoGoEvent;//////方法1//////2、>publicvoidGoFun(stringname){Console.WriteLine(name);}//////方法2//////publicvoidGoFun2(stringname){Console.WriteLine(name+"fun2");}//////测试方法///publicvoidTest(){//event无须new初始化Go+=GoFun;//errorGoEvent+=GoFun;//successGogo=ne3、wGo(GoFun);//successGoEvent+=GoFun2;//successgo+=GoFun2;//success//执行-结果一致(无区别)GoEvent("test");go("test");}}可以看到,delegate与event其实差不多,就是区别于初始化的问题。我们再来看一组代码:classProgram{staticvoidMain(string[]args){EventClasse=newEventClass();e.GoEvent+=e.GoFun;e.GoEvent+=e.GoFun2;EventClass.Gogo=newEven4、tClass.Go(e.GoFun);go+=e.GoFun2;//执行//错误1事件“EventClass.GoEvent”只能出现在+=或-=的左边(从类型“EventClass”中使用时除外)e.GoEvent("test2");//errorgo("test2");//successConsole.WriteLine("done.");Console.ReadKey();}}可以看到区别出来了:event在外部只能使用+=或-=操作。/**当有event关键字时,程序能运行正常。我把event去掉,程序也一样能运行正常。*event只不过是限制'委托实例对象'5、的能力用的,是委托的子集。*如:事件只能进行+、-不能直接Func(......)。而我取掉event之后,就可以直接用了。*/再来看看反编译会的结果:可以看到图Go委托依然有调用的方法event事件只存在add和remove方法event通过对delegate的限制来封装一部分本来就不应该暴露在外的行为
2、>publicvoidGoFun(stringname){Console.WriteLine(name);}//////方法2//////publicvoidGoFun2(stringname){Console.WriteLine(name+"fun2");}//////测试方法///publicvoidTest(){//event无须new初始化Go+=GoFun;//errorGoEvent+=GoFun;//successGogo=ne
3、wGo(GoFun);//successGoEvent+=GoFun2;//successgo+=GoFun2;//success//执行-结果一致(无区别)GoEvent("test");go("test");}}可以看到,delegate与event其实差不多,就是区别于初始化的问题。我们再来看一组代码:classProgram{staticvoidMain(string[]args){EventClasse=newEventClass();e.GoEvent+=e.GoFun;e.GoEvent+=e.GoFun2;EventClass.Gogo=newEven
4、tClass.Go(e.GoFun);go+=e.GoFun2;//执行//错误1事件“EventClass.GoEvent”只能出现在+=或-=的左边(从类型“EventClass”中使用时除外)e.GoEvent("test2");//errorgo("test2");//successConsole.WriteLine("done.");Console.ReadKey();}}可以看到区别出来了:event在外部只能使用+=或-=操作。/**当有event关键字时,程序能运行正常。我把event去掉,程序也一样能运行正常。*event只不过是限制'委托实例对象'
5、的能力用的,是委托的子集。*如:事件只能进行+、-不能直接Func(......)。而我取掉event之后,就可以直接用了。*/再来看看反编译会的结果:可以看到图Go委托依然有调用的方法event事件只存在add和remove方法event通过对delegate的限制来封装一部分本来就不应该暴露在外的行为
此文档下载收益归作者所有