在张子阳的文章我相信已经把事件和委托讲的很清楚了,下面我说说我感觉需要注意的地方。
在C++中用函数指针来实现回调函数(回调函数是一种非常有用的编程机制),然而函数指针不是类型安全的, 所以.net Framework提供了称为委托的类型安全的机制来实现函数的回调。
当我们像下面一样在代码中定义一个委托时,
Public delegate void Comparator(int value);
但是编译器遇到这行代码会定义一个类:
View Code
从上面代码可以知道 委托 也是一个类,其中有一个构造器,Invoke方法,BeginInvoke方法 和EndInvoke方法。构造器有两个参数,对象引用传给构造器的Object参数,方法的引用传给method 参数,对于静态方法,会为Object 参数传递null.
先看一个事件的定义:
编译器在编译事件的时候会把它转换为三个构造:
从上面代码可以看出第一部分是申明一个私有的委托字段, 后面两部分是对这个委托字段的add访问器和remove 访问器,我们知道属性中有get 和set 访问器,其实事件就是委托字段的访问器,只是访问器方法用add 和remove,而属性用get和set.
到这里我要讲的差不多说完了, 这是我第一次写文章,尽管上面的内容理解的不是很深入,但是我只是想通过这样的方式来巩固自己看到的知识,因为我觉得这样可以记录下我不同时段对知识的理解以及写的时候自己也在不断思考,这样会有利于对知识的理解。
最后我为初学者推荐关于深入理解.net Framework几本书, 因为我感觉很多初学者不知道买什么书来学习。
CLR via C# (第三版) 作者:Jeffrey Richter (周靖译) 清华大学出版社
深入理解C#(第2版)作者:Jon Skeet 周靖(译)人民邮电出版社
现在关于C# 方面的书籍很多,所以对于一些初学者来说不知道怎么选择, 我推荐上面两本书,如果认真的看完的话, 我相信你肯定对.net 会有一定的理解, 然后通过项目实践的方式对书中内容进行巩固。个人觉得要深入理解程序底层的东西, 有必要阅读一些关于操作系统和编译器相关的书籍,本人一向提倡“知其然知其所以然”的学习方式。
在此推荐一本操作系统相关的书籍: 深入理解计算机系统 (美)布莱恩特,奥哈拉伦 著 龚奕利,雷迎春 译 机械工业出版社。
希望这篇文章对大家会有帮助。
本文转自LearningHard 51CTO博客,原文链接:http://blog.51cto.com/learninghard/1033992,如需转载请自行联系原作者