返回首页


我只是挖内的代表,行动和通过lambda表达式匿名委托。我开始对自己问几个好奇的问题因此载挖内回答他们。这样做时,我发现一个有趣的事情,我想与大家分享。希望它是有用的:
首先,我写了一个示例代码如下所示:

Action del = () => Console.WriteLine(Hello?;

del();

del.Invoke();

是的,代码是非常简单的,但我开始怀疑,问自己一个问题,是委托调用上述两种不同的风格之间的差异。
如果你没有意识到这一点,每一个代表内部类类型只有代表四个重要方法:BeginInvoke来调用的EndInvoke,和CTOR。有没有什么太多的解释有关这些方法的。
我看了看里面的IL,才知道,实际上是委托调用上述两个风格相同。编译器只是转换德尔()del.Invoke()。所以会有2 del.Invoke()语句在下面的IL操作码所示: {C}
接下来,我问自己,如何处理内部上面使用lambda表达式。我发现,lambda表达式我在使用代码处理作为一个阶级内部的IL。下面的代码产生我使用的匿名委托的两个类:
MyDelegate del = () => (2 + 2).ToString();

del = () => (4 + 4).ToString();\

让我们来看看将IL编译器做了什么魅力:{体C3}
正如你可以看到,它已经产生的那些匿名委托各两班上面显示的名称。匿名委托,宣布任何地方的问题,他们也得到了相同的命名方式。但我仍然不知道,寻找答案,为什么所有的匿名委托的前缀政务司司长为LT,GT; 9__。可能是微软选择保持这种方式?不知道!如果你知道,请发表评论。
这是所有我能找到到目前为止,我必分享更多,如果我找到更多{S0的} PS:我们非常感激您的评论/投票{S0的}

回答

评论会员: 时间:2
akemper:我喜欢你的文章。每个目标机器上没有安装。NET框架4.0因此,有趣的展示,如何可以实现并行的"手",而不是使用新功能。请检查你的代码。的语句被打破,可能是由于HTML编码。"行动机构"参数不正确的VS2010Express中编译。它应该是"Actionlt;intgt;身体"?正确的格式将提高可读性。谢谢!阿克塞尔・肯珀