为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕村9548890 2021-09-19 16:28:10
我自己多次问过这个问题。我试图找到一些关于此的博客文章,甚至深入研究 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 任何内容。这对我来说听起来更抽象。编辑另外,如果有人能指出我在编译器中指定所需预定义类型的源代码,请告诉我!
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 292 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信