.NET 提供一個稱為通用語言執行環境的執行環境,負責執行程式碼並提供讓開發過程更簡單的服務。
編譯程式和工具會公開 Common Language Runtime 的功能,並可讓您撰寫受益於 Managed 執行環境的程式代碼。 您以針對執行階段為目標的語言編譯器開發的代碼稱為託管代碼。 受控程式代碼受益於跨語言整合、跨語言例外狀況處理、增強的安全性、版本設定和部署支援、元件互動的簡化模型,以及偵錯和分析服務等功能。
備註
編譯器和工具能產生通用語言執行時能消耗的輸出,因為型別系統、元資料格式及執行環境(虛擬執行系統)皆由公開標準 ECMA 通用語言基礎架構規範定義。 如需詳細資訊,請參閱 ECMA C# 和 Common Language Infrastructure Specifications。
為了讓執行階段能為受控程式碼提供服務,語言編譯器必須產生元數據,以描述程式碼中的類型、成員及參考。 元數據會與程式代碼一起儲存;每個可載入的 Common Language Runtime 可攜式可執行檔 (PE) 檔案都包含元數據。 執行時使用元資料來定位與載入類別、在記憶體中佈局實例、解析方法調用、產生原生程式碼、強制執行安全性,以及設定執行時上下文邊界。
執行階段會自動處理物件配置,管理對物件的引用,並在物件不再使用時釋放它們。 以這種方式管理其存留期的物件稱為受管理資料。 垃圾收集可消除記憶體流失和其他一些常見的程式設計錯誤。 如果您的程式碼是受控的,您可以在 .NET 應用程式中使用受控資料、非受控資料或兩者。 因為語言編譯程式會提供自己的類型,例如基本類型,因此您可能不一定知道或需要知道您的數據是否受到管理。
Common Language Runtime 可讓您輕鬆地設計物件跨語言互動的元件和應用程式。 以不同語言撰寫的物件可以彼此通訊,而且其行為可以緊密整合。 例如,您可以定義類別,然後使用不同的語言從原始類別衍生類別,或在原始類別上呼叫 方法。 您也可以將某個類別的物件傳遞給由不同語言撰寫的類別中的方法。 這種跨語言整合是可能的,因為以運行時間為目標的語言編譯程式和工具會使用運行時間所定義的通用類型系統。 他們會遵循運行時間的規則來定義新的類型,以及建立、使用、保存和系結至類型。
作為其元數據的一部分,所有管理的元件都會攜帶關於它們建置時所依據的元件和資源的信息。 運行時間會使用這項資訊來確保您的元件或應用程式具有所需的一切指定版本,這會使您的程式代碼因為某些未符合的相依性而不太可能中斷。 註冊資訊和狀態數據不再儲存在登錄中,因此難以建立和維護。 相反地,您所定義類型的相關信息及其相依性會以程式代碼儲存為元數據。 如此一來,元件復寫和移除的工作就不那麼複雜。
語言編譯程式和工具會以開發人員有用且直覺的方式公開運行時間的功能。 運行時間的某些功能在一個環境中可能比另一個環境更明顯。 您體驗運行時間的方式取決於您使用的語言編譯程式或工具。 例如,如果您是 Visual Basic 開發人員,您可能會注意到,使用 Common Language Runtime 時,Visual Basic 語言具有比以往更多的面向物件功能。 執行時間提供下列優點:
效能改善。
能夠輕鬆地使用以其他語言開發的元件。
類別庫所提供的可延伸類型。
面向物件程式設計的語言功能,例如繼承、介面和多載。
支援明確的免費線程,允許建立多線程和可調整的應用程式。
支持結構化例外狀況處理。
支援自訂屬性。
垃圾收集。
使用委派而非函式指標,以提升型別安全性和系統安全。 如需委派的詳細資訊,請參閱 Common Type System。
CLR 版本
.NET Core 和 .NET 5+ 版本具有單一產品版本,也就是說,沒有個別的 CLR 版本。 如需 .NET Core 版本的清單,請參閱 下載 .NET Core。
不過,.NET Framework 版本號碼不一定對應至它所包含的 CLR 版本號碼。 如需 .NET Framework 版本及其對應的 CLR 版本清單,請參閱 .NET Framework 版本和相依性。
相關文章
| 標題 | 說明 |
|---|---|
| 受控執行程式 | 描述利用 Common Language Runtime 所需的步驟。 |
| 自動記憶體管理 | 描述垃圾收集器如何分配和釋放記憶體。 |
| .NET Framework 概觀 | 描述重要的 .NET Framework 概念,例如通用類型系統、跨語言互作性、Managed 執行、應用程式域和元件。 |
| 一般類型系統 | 描述如何在運行時間中宣告、使用及管理類型,以支援跨語言整合。 |