WEB开发网      婵犻潧鍊婚弲顐︽偟椤栨稓闄勯柦妯侯槸閻庤霉濠婂骸浜剧紒杈ㄥ笚閹峰懘鎮╅崹顐ゆ殸婵炴垶鎸撮崑鎾趁归悩鐑橆棄闁搞劌瀛╃粋宥夘敃閿濆柊锕傛煙鐎涙ê鐏f繝濠冨灴閹啴宕熼鍡╀紘婵炲濮惧Λ鍕叏閳哄懎绀夋繛鎴濈-楠炪垽鎮归崶褍妲婚柛銊ュ缁傚秹鏁撻敓锟� ---闂佹寧娲╅幏锟�
开发学院软件开发C语言 通过Demo来细看C#事件的内在机制 阅读

通过Demo来细看C#事件的内在机制

 2010-09-30 22:44:34 来源:WEB开发网 闂侀潧妫撮幏锟�闂佸憡鍨电换鎰版儍椤掑倵鍋撳☉娆嶄沪缂傚稄鎷�婵犫拃鍛粶闁靛洤娲ㄩ埀顒佺⊕閵囩偟绱為敓锟�闂侀潧妫撮幏锟�  闂佺ǹ绻楀▍鏇㈠极閻愬灚瀚梺鍨儏閳ь剙绉归弻銊р偓闈涙啞閻h京鈧敻鍋婇崰鏍х暦閿燂拷
核心提示: 根据这个Demo,针对委托和事件而言,需要注意一些要点,通过Demo来细看C#事件的内在机制(2),我这里列举出来:1、上面的委托委托实例化用的是.Net 1.1的语法:charlesLog.processEvent+=newProcessEventHandler(CustomProcess);

根据这个Demo,针对委托和事件而言,需要注意一些要点,我这里列举出来: 

1、 上面的委托委托实例化用的是.Net 1.1的语法: 

charlesLog.processEvent += new ProcessEventHandler(CustomProcess);

(注:)随着Net版本升级,委托实例化的语法简化,在2.0有匿名方法,以及3.0的Lambda表达式更能符合人类语言。

2、 申明事件的语法是:”修饰符” event <委托类型> 事件名”,实际上是比申明委托实例多了一个event关键字而已。

3、 使用”+=”符合的时候会根据委托进行自动判断:

如果此时委托还没有实例化(null),它会自动用+=来对委托实例化。

如果委托已经实例化,它用+=来把函数注册委托指定的委托链上。

4、 事件(上面的processEvent)注册事件处理程序只能用+=或者-=,不能用=。否则会出现

CharlesLog.processEvent只能出现在+=或-=的左边(CharlesLog类中使用除外)。

注意委托(delegate)是可以用=号来实例化

OK,上面提出的几点都是平常我们要注意的地方。如第4点,也许你会问为什么委托可以用=,而事件却不能用=号,而只能用+=和-=呢?通过Reflactor工具来看一看event背后发生的事情:

public event ProcessEventHandler processEvent;

通过C#编译器会编译成:

通过Demo来细看C#事件的内在机制

可以看到,尽管这里定义的processEvent申明为public,但是实际上processEvent会被编译成私有字段(到这里你应该晓得为什么对于事件你不能在外部用”=”,但是对于内部可以用”=”)。因为它根本不允许在CharlesLog的外面已赋值的方式来访问。我们进一步看一下:

上一页  1 2 3 4  下一页

Tags:通过 Demo 细看

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接