我自己多次問過這個問題。我試圖找到一些關于此的博客文章,甚至深入研究 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 回答
- 0 關注
- 307 瀏覽
添加回答
舉報
0/150
提交
取消