(每日心得)关于C#中委托和事件的一些认识(三)
2013-09-29 12:08
483 查看
[b]在了解委托与事件前,我们先看一段代码:[/b]
在这段代码中我在factory类中创建了一个public 类型的委托,然后利用委托生成了一个event类型的事件。接着在主函数中就可以利用事件,使用类似于委托实例的方法向事件加入方法。那么委托和事件究竟有什么关系呢?
在讨论委托和事件的关系时,我们现在反编译器中查看一下编译器帮我们生成的代码,如下所示:
我们可以很清晰的看到在VS2012中所写的代码,编译器做了处理,其中最重要的是对委托的处理,我们可以清晰的看到编译器相较于我所写的多了
语句,相较于
我想大家更熟悉前者。前者正是我们所熟悉的委托的实例化语句。
在这个factory类中我们首先声明了一个委托类型,当然这个委托要声明为public ,因为delegate本身会被编译器扩展为类,如果把一个类声明为private类型,那么该delegate只是可以在他所属类型中被访问。所以如果实例了一个public类型的实例,显然是要在外界也去访问该delegate类型的实例,但是这个委托的声明类型要求改委托只是可以在包含他的代码块中被访问。这样实例化对象(也就是delegate的对象)的作用域要大于其声明类型,这显然是不合适的。并且我们声明delegate本身也就是为了在外界访问他。
如果我们现在去掉event语句而仅仅是使用delegate类型的实例。那么代码如下
这样在不改变其他代码的前提下,程序一样能够正常运行。相较于注释部分,新的代码只是少了event关键字,但是二者却有着等同的效果。如果拿类中的字段与属性相类比,其实我们发现二者具有相同的效果。而且编译器也的确会这样做,下述是编译器为事件以及为属性所生成的代码结构:
事件:
属性:
由上述代码我们就可以清楚地看到编译器对事件和属性进行了相似的操作。从这一点上我们也可以看到在C#中代码并不是看起来差别那么大,他们都是有规律可循,如果了解了内部细节将有利于我们使用C#更好的编写程序。
以上就是我对C#委托事件的认识,希望大家有什么不同意见能够和我联系,这样有助于我们大家共同进步,当然对小弟我有非常大的好处。
在这段代码中我在factory类中创建了一个public 类型的委托,然后利用委托生成了一个event类型的事件。接着在主函数中就可以利用事件,使用类似于委托实例的方法向事件加入方法。那么委托和事件究竟有什么关系呢?
在讨论委托和事件的关系时,我们现在反编译器中查看一下编译器帮我们生成的代码,如下所示:
我们可以很清晰的看到在VS2012中所写的代码,编译器做了处理,其中最重要的是对委托的处理,我们可以清晰的看到编译器相较于我所写的多了
语句,相较于
我想大家更熟悉前者。前者正是我们所熟悉的委托的实例化语句。
在这个factory类中我们首先声明了一个委托类型,当然这个委托要声明为public ,因为delegate本身会被编译器扩展为类,如果把一个类声明为private类型,那么该delegate只是可以在他所属类型中被访问。所以如果实例了一个public类型的实例,显然是要在外界也去访问该delegate类型的实例,但是这个委托的声明类型要求改委托只是可以在包含他的代码块中被访问。这样实例化对象(也就是delegate的对象)的作用域要大于其声明类型,这显然是不合适的。并且我们声明delegate本身也就是为了在外界访问他。
如果我们现在去掉event语句而仅仅是使用delegate类型的实例。那么代码如下
这样在不改变其他代码的前提下,程序一样能够正常运行。相较于注释部分,新的代码只是少了event关键字,但是二者却有着等同的效果。如果拿类中的字段与属性相类比,其实我们发现二者具有相同的效果。而且编译器也的确会这样做,下述是编译器为事件以及为属性所生成的代码结构:
事件:
属性:
由上述代码我们就可以清楚地看到编译器对事件和属性进行了相似的操作。从这一点上我们也可以看到在C#中代码并不是看起来差别那么大,他们都是有规律可循,如果了解了内部细节将有利于我们使用C#更好的编写程序。
以上就是我对C#委托事件的认识,希望大家有什么不同意见能够和我联系,这样有助于我们大家共同进步,当然对小弟我有非常大的好处。
相关文章推荐
- (每日心得)关于C#中委托与事件的一些认识(一)
- (每日心得)关于C#中委托和事件的一些认识(二)
- 关于c#中委托与事件的一些理解
- 个人关于委托事件的一些浅显认识
- C# 关于匿名委托的一些注意点
- c#关于委托和事件
- c#关于委托和事件(二)(介绍的很详细)
- 关于C#的delegate(委托)和event(事件)的使用
- c#关于委托和事件
- 关于C#中委托的一些理解与模仿
- 关于C#/.NET中委托和事件的机制和应用的故事(转)
- 很好的一篇关于C#事件与委托的文章
- 关于C# 委托(delegate)与事件(event)的用法及事例
- 关于C#/.NET中委托和事件的机制和应用的故事(转)
- 关于事件与委托的一些对比
- c#关于委托和事件
- (每日心得)对于WinForm与MFC中消息机制的一些认识
- C#学习笔记(三)—–C#高级特性中的委托与事件:关于事件
- c#关于委托和事件(二)(介绍的很详细)
- 关于事件与委托的一些个人简单理解