通过IL分析C#中的委托事件FuncActionPredicate之间的区别与联系
Posted 衣舞晨风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过IL分析C#中的委托事件FuncActionPredicate之间的区别与联系相关的知识,希望对你有一定的参考价值。
一直以来都是对于事件与委托比较混淆,而且不太会用。找了个时间,总结了一下,感觉清晰了很多。
先说一下个人理解的结论吧:
delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。
delegate声明的变量与delegate声明的事件,并没有本质的区别,事件是在delegate声明变量的基础上包装而成的,类似于变量与属性的关系(在IL代码中可以看到每一个delegate声明的事件都对应是私有的delegate声明的变量),提升了安全性。
Action 与Func:这两个其实说白了就是系统定义好的Delegate,他有很多重载的方法,便于各种应用情况下的调用。他在系统的System命名空间下,因此全局可见。
首先了解一下, ILDasm中图标含义:
该图来自:http://www.cnblogs.com/zery/p/3366175.html
委托创建步骤:
1、用delegate关键字创建一个委托,包括声明返回值和参数类型
2、使用的地方接收这个委托
3、创建这个委托的实例并指定一个返回值和参数类型匹配的方法传递过去
一、事件与委托
新建一个事件委托测试项目:EventDelegateTest
具体代码如下:
<span style="font-size:14px;"><span style="font-size:14px;">namespace EventDelegateTest
{
public class TestClass
{
public delegate int delegateAction();
public event delegateAction OnActionEvent;
public delegateAction daNew;
}
}</span></span>
编译代码后,使用 Visual Studio 2010自带的ILDASM.EXE:
从上图可以看出如下几点信息:
以上是关于通过IL分析C#中的委托事件FuncActionPredicate之间的区别与联系的主要内容,如果未能解决你的问题,请参考以下文章