中间语言。.Net 平台下不仅有 C# 语言,还有 VB.Net、F# 等语言。IL 是程序最终编译的可执行二进制代码(托管代码),相似于 Java 中的 class 字节码文件,也叫中间语言,不一样的语言最终都编译成标准的 IL(MSIL),这样在 .Net 平台下不一样语言之间的程序集就能够互相调用了。ide
公共类型系统。因为 .Net 平台上的不一样语言中的数据类型各不相同,好比整数类型在 VB.Net 中是 Integer ,而 C# 中时 int 。.Net 平台制定了一个公用类型系统(CTS),各个语言编译器把本身语言的类型翻译成 CTS 中的类型。spa
看以下几个相同功能的示例程序:翻译
internal class Program { public static void Main(string[] args) { int i = 100; Console.WriteLine(i); } }
Public Shared Sub Main(ByVal args As String()) Dim num As Integer = 100 Console.WriteLine(num) End Sub
它们最终编译的 IL 语言都为以下:code
.method public hidebysig static void Main(string[] args) cil managed { .entrypoint .maxstack 1 .locals init ( [0] int32 num) L_0000: nop L_0001: ldc.i4.s 100 L_0003: stloc.0 L_0004: ldloc.0 L_0005: call void [mscorlib]System.Console::WriteLine(int32) L_000a: nop L_000b: ret }
公共语言规范。不一样语言的语法不一样,好比定义一个类 A 继承自 类 B,C# 的语法是 Class A : B{} ,而 VB.Net 的语法是 Class A Inherits B 。所以 .Net 平台规定了公共的语言规范(CLS)。对象
公共语言运行时。顾名思义,IL 代码就是由 CLR 驱动运行,而 CLR 相似于 Java 中的 JVM,提供了垃圾回收 GC(Garbage Collection)、JIT(即时编译器)。blog
值类型变量是放再栈内存中,而引用类型的变量是放置在堆内存,栈内存变量会在方法结束后自动释放,而堆内存中的对象须要 GC 来回收。继承