天天看點

.NET Framework 概念概述

總感覺這個概念不是掌握太準,把官方的轉過來加強一下

.NET Framework 是支援生成和運作下一代應用程式和 XML Web Services 的内部 Windows 元件。.NET Framework 旨在實作下列目标:

  • 提供一個一緻的面向對象的程式設計環境,而無論對象代碼是在本地存儲和執行,還是在本地執行但在 Internet 上分布,或者是在遠端執行的。
  • 提供一個将軟體部署和版本控制沖突最小化的代碼執行環境。
  • 提供一個可提高代碼(包括由未知的或不完全受信任的第三方建立的代碼)執行安全性的代碼執行環境。
  • 提供一個可消除腳本環境或解釋環境的性能問題的代碼執行環境。
  • 使開發人員的經驗在面對類型大不相同的應用程式(如基于 Windows 的應用程式和基于 Web 的應用程式)時保持一緻。
  • 按照工業标準生成所有通信,以確定基于 .NET Framework 的代碼可與任何其他代碼內建。

.NET Framework 具有兩個主要元件:公共語言運作庫和 .NET Framework 類庫。公共語言運作庫是 .NET Framework 的基礎。您可以将運作庫看作一個在執行時管理代碼的代理,它提供記憶體管理、線程管理和遠端處理等核心服務,并且還強制實施嚴格的類型安全以及可提高安全性和可靠性的其他形式的代碼準确性。事實上,代碼管理的概念是運作庫的基本原則。以運作庫為目标的代碼稱為托管代碼,而不以運作庫為目标的代碼稱為非托管代碼。.NET Framework 的另一個主要元件是類庫,它是一個綜合性的面向對象的可重用類型集合,您可以使用它開發多種應用程式,這些應用程式包括傳統的指令行或圖形使用者界面 (GUI) 應用程式,也包括基于 ASP.NET 所提供的最新創新的應用程式(如 Web 窗體和 XML Web Services)。

.NET Framework 可由非托管元件承載,這些元件将公共語言運作庫加載到它們的程序中并啟動托管代碼的執行,進而建立一個可以同時利用托管和非托管功能的軟體環境。.NET Framework 不但提供若幹個運作庫宿主,而且還支援第三方運作庫宿主的開發。

例如,ASP.NET 承載運作庫以為托管代碼提供可伸縮的伺服器端環境。ASP.NET 直接使用運作庫以啟用 ASP.NET 應用程式和 XML Web Services(本主題稍後将對這兩者進行讨論)。

Internet Explorer 是承載運作庫(以 MIME 類型擴充的形式)的非托管應用程式的一個示例。使用 Internet Explorer 承載運作庫使您能夠在 HTML 文檔中嵌入托管元件或 Windows 窗體控件。以這種方式承載運作庫使得托管移動代碼(類似于 Microsoft® ActiveX® 控件)成為可能,不過它需要進行重大改進(如不完全受信任的執行和獨立的檔案存儲),而這種改進隻有托管代碼才能提供。

下面的插圖顯示公共語言運作庫和類庫與應用程式之間以及與整個系統之間的關系。該插圖還顯示托管代碼如何在更大的結構内運作。

.NET Framework 環境

下面的章節将更加詳細地描述 .NET Framework 的主要元件和功能。

公共語言運作庫的功能

公共語言運作庫管理記憶體、線程執行、代碼執行、代碼安全驗證、編譯以及其他系統服務。這些功能是在公共語言運作庫上運作的托管代碼所固有的。

至于安全性,取決于包括托管元件的來源(如 Internet、企業網絡或本地計算機)在内的一些因素,托管元件被賦予不同程度的信任。這意味着即使用在同一活動應用程式中,托管元件既可能能夠執行檔案通路操作、系統資料庫通路操作或其他須小心使用的功能,也可能不能夠執行這些功能。

運作庫強制實施代碼通路安全。例如,使用者可以相信嵌入在網頁中的可執行檔案能夠在螢幕上播放動畫或唱歌,但不能通路他們的個人資料、檔案系統或網絡。這樣,運作庫的安全性功能就使通過 Internet 部署的合法軟體能夠具有特别豐富的功能。

運作庫還通過實作稱為通用類型系統 (CTS) 的嚴格類型驗證和代碼驗證基礎結構來加強代碼可靠性。CTS 確定所有托管代碼都是可以自我描述的。各種 Microsoft 和第三方語言編譯器生成符合 CTS 的托管代碼。這意味着托管代碼可在嚴格實施類型保真和類型安全的同時使用其他托管類型和執行個體。

此外,運作庫的托管環境還消除了許多常見的軟體問題。例如,運作庫自動處理對象布局并管理對對象的引用,在不再使用它們時将它們釋放。這種自動記憶體管了解決了兩個最常見的應用程式錯誤:記憶體洩漏和無效記憶體引用。

運作庫還提高了開發人員的工作效率。例如,程式員可以用他們選擇的開發語言編寫應用程式,卻仍能充分利用其他開發人員用其他語言編寫的運作庫、類庫群組件。任何選擇以運作庫為目标的編譯器供應商都可以這樣做。以 .NET Framework 為目标的語言編譯器使得用該語言編寫的現有代碼可以使用 .NET Framework 的功能,這大大減輕了現有應用程式的遷移過程的工作負擔。

盡管運作庫是為未來的軟體設計的,但是它也支援現在和以前的軟體。托管和非托管代碼之間的互操作性使開發人員能夠繼續使用所需的 COM 元件和 DLL。

運作庫旨在增強性能。盡管公共語言運作庫提供許多标準運作庫服務,但是它從不解釋托管代碼。一種稱為實時 (JIT) 編譯的功能使所有托管代碼能夠以它在其上執行的系統的本機語言運作。同時,記憶體管理器排除了出現零碎記憶體的可能性,并增大了記憶體引用區域以進一步提高性能。

最後,運作庫可由高性能的伺服器端應用程式(如 Microsoft® SQL Server™ 和 Internet 資訊服務 (IIS))承載。此基礎結構使您在享受支援運作庫宿主的行業最佳企業伺服器的優越性能的同時,能夠使用托管代碼編寫業務邏輯。

.NET Framework 類庫

.NET Framework 類庫是一個與公共語言運作庫緊密內建的可重用的類型集合。該類庫是面向對象的,并提供您自己的托管代碼可從中導出功能的類型。這不但使 .NET Framework 類型易于使用,而且還減少了學習 .NET Framework 的新功能所需要的時間。此外,第三方元件可與 .NET Framework 中的類無縫內建。

例如,.NET Framework 集合類實作一組可用于開發您自己的集合類的接口。您的集合類将與 .NET Framework 中的類無縫地混合。

正如您對面向對象的類庫所希望的那樣,.NET Framework 類型使您能夠完成一系列常見程式設計任務(包括諸如字元串管理、資料收集、資料庫連接配接以及檔案通路等任務)。除這些常見任務之外,類庫還包括支援多種專用開發方案的類型。例如,可使用 .NET Framework 開發下列類型的應用程式和服務:

  • 控制台應用程式。
  • Windows GUI 應用程式(Windows 窗體)。
  • ASP.NET 應用程式。
  • XML Web Services。
  • Windows 服務。

例如,Windows 窗體類是一組綜合性的可重用的類型,它們大大簡化了 Windows GUI 的開發。如果要編寫 ASP.NET Web 窗體應用程式,可使用 Web 窗體類。

用戶端應用程式開發

用戶端應用程式在基于 Windows 的程式設計中最接近于傳統風格的應用程式。這些是在桌面上顯示視窗或窗體進而使使用者能夠執行任務的應用程式類型。用戶端應用程式包括諸如字處理程式和電子表格等應用程式,還包括自定義的業務應用程式(如資料輸入工具、報告工具等等)。用戶端應用程式通常使用視窗、菜單、按鈕和其他 GUI 元素,并且它們可能通路本地資源(如檔案系統)和外圍裝置(如列印機)。

另一種用戶端應用程式是作為網頁通過 Internet 部署的傳統 ActiveX 控件(現在被托管 Windows 窗體控件所替代)。此應用程式非常類似于其他用戶端應用程式:它在本機執行,可以通路本地資源,并包含圖形元素。

過去,開發人員結合使用 C/C++ 與 Microsoft 基礎類 (MFC) 或應用程式快速開發 (RAD) 環境(如 Microsoft® Visual Basic®)來建立此類應用程式。.NET Framework 将這些現有産品的特點合并到了單個且一緻的開發環境中,該環境大大簡化了用戶端應用程式的開發。

包含在 .NET Framework 中的 Windows 窗體類旨在用于 GUI 開發。您可以輕松建立具有适應多變的商業需求所需的靈活性的指令視窗、按鈕、菜單、工具欄和其他螢幕元素。

例如,.NET Framework 提供簡單的屬性以調整與窗體相關聯的可視屬性。某些情況下,基礎作業系統不支援直接更改這些屬性,而在這些情況下,.NET Framework 将自動重新建立窗體。這是 .NET Framework 內建開發人員接口進而使編碼更簡單更一緻的許多方法之一。

和 ActiveX 控件不同,Windows 窗體控件具有對使用者計算機的不完全受信任的通路權限。這意味着二進制代碼或在本機執行的代碼可通路使用者系統上的某些資源,例如 GUI 元素和通路受限制的檔案,但這些代碼不能通路或危害其他資源。由于具有代碼通路安全性,許多曾經需要安裝在使用者系統上的應用程式現在可以通過 Web 部署。您的應用程式可以在像網頁那樣部署時實作本地應用程式的功能。

伺服器應用程式開發

在托管領域中,伺服器端應用程式是通過運作庫宿主實作的。非托管應用程式承載公共語言運作庫,後者使您的自定義托管代碼可以控制伺服器的行為。此模型在獲得主伺服器的性能和可伸縮性的同時提供給您公共語言運作庫和類庫的所有功能。

下面的插圖顯示在不同伺服器環境中運作托管代碼的基本網絡架構。在應用程式邏輯通過托管代碼執行時,伺服器(如 IIS 和 SQL Server)可執行标準操作。

伺服器端托管代碼

ASP.NET 是使開發人員能夠使用 .NET Framework 開發基于 Web 的應用程式的宿主環境。但是,ASP.NET 不止是一個運作庫宿主;它是使用托管代碼開發網站和通過 Internet 分布的對象的完整結構。Web 窗體和 XML Web Services 都将 IIS 和 ASP.NET 用作應用程式的釋出機制,并且兩者在 .NET Framework 中都具有支援類集合。

XML Web Services 作為基于 Web 的技術的重要發展,是類似于常見網站的分布式伺服器端應用程式元件。但是,與基于 Web 的應用程式不同,XML Web Services 元件不具有 UI 并且不以浏覽器(如 Internet Explorer 和 Netscape Navigator)為目标。XML Web Services 由旨在供其他應用程式使用的可重用的軟體元件組成,所謂的其他應用程式包括:傳統的用戶端應用程式,基于 Web 的應用程式,甚至是其他 XML Web Services。是以,XML Web Services 技術正迅速地将應用程式開發和部署推向高度分布式 Internet 環境。

如果您使用過 ASP 技術的早期版本,很快就會注意到 ASP.NET 和 Web 窗體提供的改進。例如,您可以用支援 .NET Framework 的任何語言開發 Web 窗體頁。此外,您的代碼不再需要與 HTTP 文本共享同一個檔案(盡管如果您願意,代碼還可以繼續這樣做)。Web 窗體頁用本機語言執行,這是因為與所有其他托管應用程式一樣,它們充分利用運作庫。與此相對照,非托管 ASP 頁始終被寫成腳本并解釋。ASP.NET 頁比非托管 ASP 頁更快、更實用并且更易于開發,這是因為它們像所有托管應用程式一樣與運作庫進行互動。

.NET Framework 還提供類和工具的集合來幫助開發和使用 XML Web Services 應用程式。XML Web Services 是基于 SOAP(一種遠端過程調用協定)、XML(一種可擴充的資料格式)和 WSDL(Web 服務描述語言)這些标準生成的。基于這些标準生成 .NET Framework 的目的是為了提高與非 Microsoft 解決方案的互操作性。