首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ILSpy生成的代码

ILSpy生成的代码
EN

Stack Overflow用户
提问于 2018-08-21 00:06:14
回答 1查看 122关注 0票数 0

我正在试图弄清楚C#中的任务是如何在幕后工作的。我找到了这篇文章。

http://foreverframe.net/what-lies-beneath-asyncawait-in-c/

但是,我花了一些时间寻找某一行的含义,但没有找到任何东西。

例如。

代码语言:javascript
复制
        private int <>s__4;

        private int <>s__5;

        private int <>s__6;

“<>”符号是什么意思?有很多解压c#源代码的例子,它们总是包含像"<>d__0“这样的东西?

我在谷歌上搜索了IL操作码参考,以及ILSpy教程,它们可以解释这一点,但什么都没有。我仍然对完全理解C#中的任务模式感到好奇。

预先感谢您对此示例的帮助,或者向我提供适当的文档/参考资料。

EN

回答 1

Stack Overflow用户

发布于 2018-08-21 00:10:44

<>字符在C#中是非法的,但在IL中是合法的。

让我解释一下。

当编译器自动生成代码时,例如,当它将使用yield return的方法转换为状态机,或者将async/await方法转换为类似的方法时,它通常会构造一个类来承载这些转换后的代码。

以前的局部变量也被重写为该类上的字段,以便在状态转换中幸存下来,而状态转换通常是从方法返回的。

您看到的字段就是那些生成的字段。这里的名称是由编译器以这样的方式选择的,在IL中是合法的,但在C#中是非法的,这意味着在任何情况下编译器都不会意外地生成您也用于字段或标识符的名称。

就是这样,这些都是合法的字段,在IL方面,但在C#方面,是非法的名称。

除了名字,他们只是..。字段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51934617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档