IEnumerable<T>、Task<T> 和 IDisposable 是否在 C#

我自己多次问过这个问题。我试图找到一些关于此的博客文章,甚至深入研究 Roslyn 源代码,但没有找到任何完整的答案。

基本上,使用一些现代 C# 语言功能,编译器将采用一些语法糖并将其转换为更底层的 C# 代码。其中的一些例子是:

  • using()生成一个try-finally肯定处置一个IDisposable

  • 返回IEnumerable<T>with 的yield return函数将该函数转换为作为状态机实现的迭代器

  • 标记为 的函数async必须返回Task<T>(或类似的)并且也将变成状态机,可以从引擎盖下的程序事件循环重新进入

所以,这些都是很好的特性,但是编译器总是强制执行特定的类型IEnumerable<T>,Task<T>IDisposable这些类型是否以某种方式融入了编译器?即使mscorlib只是提供通用功能的普通 C# 代码,编译器是否也以某种方式绑定到标准库?

我无法想象,因为编程语言是如此抽象和通用。正如我所见await,只要类型具有GetAwaiter扩展方法,就可以使用-ing 任何内容。这对我来说听起来更抽象。

编辑

另外,如果有人能指出我在编译器中指定所需预定义类型的源代码,请告诉我!


慕村9548890
浏览 293回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP