中間語言。.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 來回收。繼承