Sma*_*ery 5 .net c# frameworks programming-languages
我看到语言功能,如C#的foreach循环(需要使用IEnumerable),以及它的using语法(使用IDisposable,知道调用哪个方法)和LINQ(我假设它也使用了一堆.NET东西).所有这些似乎都与.NET框架紧密相关.所以:
调查此问题的最佳位置是C#语言规范.例如,在枚举的情况下,这里有一些来自规范的片段:
10.14.2可枚举的接口
可枚举接口是非通用接口System.Collections.IEnumerable以及通用接口System.Collections.Generic.IEnumerable的所有实例.为简洁起见,在本章中,这些接口分别被引用为IEnumerable和IEnumerable.
...
10.14.5.1 GetEnumerator方法
可枚举对象提供IEnumerable和IEnumerable接口的GetEnumerator方法的实现.两个GetEnumerator方法共享一个通用实现,该实现获取并返回可用的枚举器对象.初始化枚举器对象时,在初始化可枚举对象时保存参数值和实例值,否则枚举器对象的功能如第10.14.4节中所述.
这与.NET BCL 中实际定义这些接口的方式很好地结合,尽管不同(即非.NET)框架完全可以提供C#编译器随后可以定位的类似的兼容实现.
难以与.NET框架分离的规范部分通常标记为:
注意:本节仅适用于C#的Microsoft .NET实现.
另一方面,foreach实际上并不需要IEnumerable ; 它可以使用一种"鸭子打字",您可以在规范的第8.8.4节中阅读.