C#和.NET的区别有多大?

C#和.NET的区别有多大?,c#,.net,frameworks,programming-languages,C#,.net,Frameworks,Programming Languages,我看到了一些语言特性,比如C#的foreach循环(需要使用IEnumerable),以及使用语法的(使用IDisposable,知道调用哪个方法)和LINQ(我假设它也使用了一堆.NET东西)。所有这些似乎都与.NET框架紧密相连。因此: C#能否以不同的框架存在?(已经有了吗?) 如果是这样,语言如何指定“foreach循环需要IEnumerable实例”,而不将其绑定到框架中 是-是一个开源软件 跨平台实现 .Net框架 不确定,很好 问题。Mono取代了 .Net framework

我看到了一些语言特性,比如C#的
foreach
循环(需要使用
IEnumerable
),以及使用
语法的
(使用
IDisposable
,知道调用哪个方法)和LINQ(我假设它也使用了一堆.NET东西)。所有这些似乎都与.NET框架紧密相连。因此:

  • C#能否以不同的框架存在?(已经有了吗?)
  • 如果是这样,语言如何指定“foreach循环需要IEnumerable实例”,而不将其绑定到框架中
  • 是-是一个开源软件 跨平台实现 .Net框架
  • 不确定,很好 问题。Mono取代了 .Net framework和CLR等 这对Mono来说不是问题

  • 调查这一点的最佳地点是。 例如,对于可枚举项,以下是规范中的一些片段:

    10.14.2可枚举接口

    可枚举接口是 非通用接口 System.Collections.IEnumerable和all 泛型的实例化 接口 System.Collections.Generic.IEnumerable。 为了简洁起见,在本节中 第二章这些接口是 引用为IEnumerable和 i分别是可数的

    10.14.5.1 GetEnumerator方法

    可枚举对象提供 GetEnumerator的实现 IEnumerable和IEnumerable方法 IEnumerable接口。两个 GetEnumerator方法共享一个公共 获得和 返回可用的枚举数 对象枚举器对象为 用参数值初始化 当 已初始化可枚举对象,但 否则,枚举器对象 功能如§10.14.4所述

    这与.NET BCL中实际定义这些接口的方式密切相关,尽管完全可以使用不同的(即非.NET)框架来提供C#编译器可以针对的类似、兼容的实现

    规范中难以与.NET framework分离的部分通常标记为:

    注意:本节仅适用于C#的Microsoft.NET实现


    另一方面,
    foreach
    实际上并不需要
    IEnumerable
    ;它可以使用一种“duck-typing”,您可以在规范的第8.8.4节中了解到这一点。

    Ah,因此它实际上是关于语言的实现,那么?@Smashery:我认为最好从兼容编译器的实现角度来考虑它;与foreach类似,它完全基于模式。表达式树的依赖性更强,但该转换的细节实际上并不在规范中。没错,尽管如您所说,Mono是.NET framework的一个实现。这并不是一个完全不同的框架。我更想知道的是“C#能否处理Python库这样不同的东西?”