.NET Framework是用哪种语言编写的?

53

我一直想问但一直不敢问的问题是 - .NET Framework是用什么语言编写的? 我的意思是指它本身的库。
我认为主要是用C和C++编写的。(我希望Jon Skeet能看到这个问题,听听他对此的看法会很有趣)


1
下载源代码并查看:http://referencesource.microsoft.com/netframework.aspx - Michiel van Oosterhout
@michielvoo,你的链接失效了,请更新一下,谢谢。 - Aelphaeis
4
现在它只是http://referencesource.microsoft.com。 - Michiel van Oosterhout
5个回答

64

CLI/CLR是用C/C++和汇编语言编写的。几乎所有.NET框架类都是用C#编写并编译成运行于CLR的IL代码。当您在反编译器中查看框架库的类时,您可能会看到一个属性,例如[MethodImpl(MethodImplOptions.InternalCall)],它将调用委托给了CLI。


11
请注意,此仅适用于Microsoft .NET。 CLI的其他实现可能具有不同的架构。例如,在Mono中,许多在Microsoft .NET中用C / C ++编写的内容实际上是用C#编写的。此外,还有由微软研究和其他组织编写的元循环实现,完全使用C#编写。 - Jörg W Mittag
1
这基本上在StyleCop的历史中已经说明,如果有人想要引用参考。 - Tim Lehner
3
“C/C++”是什么?你甚至不能表达出你是指“C和C++”,否则你应该写成“C/C++/汇编”。 - Lightness Races in Orbit
@JörgWMittag 哪些CLR实现完全是用C#编写的? - Maniero
1
@bigown:比如说Bartok。注意,我并没有说过有用C#编写的CLR实现。CLR是用C++编写的。然而,CLR只是CLI VES的许多实现之一。还有其他的CLI实现。Bartok是一个静态编译器,从CIL到本地代码加上运行时(包括垃圾收集器),全部用C#编写。因此,它与CLR非常不同(CLR也是一个编译器,但是是动态JIT,而不是静态AOT),但它仍然是完整CLI的实现,包括但不限于CLI VES、CLI CIL、CLI库等等。 - Jörg W Mittag
显示剩余3条评论

6

.NET是完全使用C和C++编写的,因为其基础是汇编语言。将汇编语言与C集成比较新的语言要容易得多。


5

微软.NET Framework被分为许多部分。

CLR: C++

IO/Signal Processing: Assembly

Baseclass Library: C#

System.Threading: C#

Complex Data Structure: C++

Example: GetHashCode


4

有些.NET Framework的部分是开源的,比如ASP.NET MVC,它是用C#编写的。

由于.NET Framework表示许多程序集,我认为不同的库可能是用不同的语言编写的。只要语言符合CLR规范,就可以用来构建框架的各个部分。

总的来说,我认为大部分.NET Framework都是用C++和C#编写的。


-1

3
那篇文章中提到:"我们实际上是用 SMC 写的原始 BCL。将其转换为 C# 是一个冒险"。因此,.NET Framework 的 BCL 实际上是用 C# 编写的。 - Suamere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接