【文章內容簡介】
托管和非托管代碼之間的互操作性使開發(fā)人員能夠繼續(xù)使用所需的 COM 組件和DLL。運行庫旨在增強性能。盡管公共語言運行庫提供許多標準運行庫服務,但是它從不解釋托管代碼。一種稱為實時 (JIT) 編譯的功能使所有托管代碼能夠以它在其上執(zhí)行的系統(tǒng)的本機語言運行。同時,內存管理器排除了出現零碎內存的可能性,并增大了內存引用區(qū)域以進一步提高性能。最后,運行庫可由高性能的服務器端應用程序(如 Microsoft174。 SQL Server? 和 Internet 信息服務 (IIS))承載。此基礎結構使您在享受支持運行庫宿主的行業(yè)最佳企業(yè)服務器的優(yōu)越性能的同時,能夠使用托管代碼編寫業(yè)務邏輯。[15]2 .NET 框架類庫.NET 框架類庫是一個與公共語言運行庫緊密集成的可重用的類型集合。該類庫是面向對象的,并提供您自己的托管代碼可從中導出功能的類型。這不但使 .NET 框架類型易于使用,而且還減少了學習 .NET 框架的新功能所需要的時間。此外,第三方組件可與 .NET 框架中的類無縫集成。例如,.NET 框架集合類實現一組可用于開發(fā)您自己的集合類的接口。您的集合類將與 .NET 框架中的類無縫地混合。正如您對面向對象的類庫所希望的那樣,.NET 框架類型使您能夠完成一系列常見編程任務(包括諸如字符串管理、數據收集、數據庫連接以及文件訪問等任務)。除這些常見任務之外,類庫還包括支持多種專用開發(fā)方案的類型。例如,可使用 .NET 框架開發(fā)下列類型的應用程序和服務: 控制臺應用程序。 腳本應用程序或寄宿的應用程序。 Windows GUI 應用程序(Windows 窗體)。 應用程序。 XML Web services。 Windows 服務。 例如,Windows 窗體類是一組綜合性的可重用的類型,它們大大簡化了 Windows GUI 的開發(fā)。如果要編寫 Web 窗體應用程序,可使用 Web 窗體類。[12]3 客戶端應用程序開發(fā)客戶端應用程序在基于 Windows 的編程中最接近于傳統(tǒng)風格的應用程序。這些是在桌面上顯示窗口或窗體從而使用戶能夠執(zhí)行任務的應用程序類型。客戶端應用程序包括諸如字處理器和電子表格等應用程序以及自定義的業(yè)務應用程序(如數據輸入工具、報告工具等等)。客戶端應用程序通常使用窗口、菜單、按鈕和其他 GUI 元素,并且它們可能訪問本地資源(如文件系統(tǒng))和外圍設備(如打印機)。另一種客戶端應用程序是作為 Web 頁通過 Internet 部署的傳統(tǒng) ActiveX 控件(現在被托管 Windows 窗體控件所替代)。此應用程序非常類似于其他客戶端應用程序:它在本機執(zhí)行,可以訪問本地資源,并包含圖形元素。過去,開發(fā)人員將 C/C++ 與 Microsoft 基礎類 (MFC) 或應用程序快速開發(fā) (RAD) 環(huán)境(如 Microsoft174。 Visual Basic174。)一起使用來創(chuàng)建這樣的應用程序。.NET 框架將這些現有產品的特點合并到了單個且一致的開發(fā)環(huán)境中,該環(huán)境大大簡化了客戶端應用程序的開發(fā)。包含在 .NET 框架中的Windows 窗體類旨在用于 GUI 開發(fā)。您可以輕松創(chuàng)建具有適應多變的商業(yè)需求所需的靈活性的命令窗口、按鈕、菜單、工具欄和其他屏幕元素。例如,.NET 框架提供簡單的屬性以調整與窗體相關聯的可視屬性。某些情況下,基礎操作系統(tǒng)不支持直接更改這些屬性,而在這些情況下,.NET 框架將自動重新創(chuàng)建窗體。這是 .NET 框架集成開發(fā)人員接口從而使編碼更簡單更一致的許多方法之一。和 ActiveX 控件不同,Windows 窗體控件具有對用戶計算機的不完全受信任的訪問權限。這意味著二進制代碼或在本機執(zhí)行的代碼可訪問用戶系統(tǒng)上的某些資源(如 GUI 元素和受限制的文件訪問)而不能訪問或危害其他資源。由于具有代碼訪問安全性,許多曾經需要安裝在用戶系統(tǒng)上的應用程序現在可以通過 Web 安全地部署。您的應用程序可以在像 Web 頁那樣部署時實現本地應用程序的功能。[13]4 服務器應用程序開發(fā)在托管領域中,服務器端應用程序是通過運行庫宿主實現的。非托管應用程序承載公共語言運行庫,后者使您的自定義托管代碼可以控制服務器的行為。此模型在獲得主服務器的性能和可伸縮性的同時提供給您公共語言運行庫和類庫的所有功能。在應用程序邏輯通過托管代碼執(zhí)行時,服務器(如 IIS 和 SQL Server)可執(zhí)行標準操作。 圖 服務器端托管代碼 是使開發(fā)人員能夠使用 .NET 框架開發(fā)基于 Web 的應用程序的宿主環(huán)境。但是, 不止是一個運行庫宿主;它是使用托管代碼開發(fā) Web 站點和通過 Internet 分布的對象的完整結構。Web 窗體和 XML Web services 都將 IIS 和 用作應用程序的發(fā)布機制,并且兩者在 .NET 框架中都具有支持類集合。XML Web services 作為基于 Web 的技術的重要發(fā)展,是類似于常見 Web 站點的分布式服務器端應用程序組件。但是,與基于 Web 的應用程序不同,XML Web services 組件不具有 UI 并且不以瀏覽器(如 Internet Explorer 和Netscape Navigator)為目標。相反,XML Web services 包含旨在供其他應用程序(如傳統(tǒng)的客戶端應用程序、基于 Web 的應用程序或者甚至是其他 XML Web services)使用的可重用的軟件組件。因此,XML Web services 技術正迅速地將應用程序開發(fā)和部署推向高度分布式 Internet 環(huán)境。如果您使用過 ASP 技術的早期版本,您馬上就會注意到 和 Web 窗體提供的改進。例如,您可以用支持 .NET 框架的任何語言開發(fā) Web 窗體頁。此外,您的代碼不再需要與 HTTP 文本共享同一個文件(盡管如果您愿意,代碼還可以繼續(xù)這樣做)。Web 窗體頁用本機語言執(zhí)行,這是因為與所有其他托管應用程序一樣,它們充分利用運行庫。與此相對照,非托管 ASP 頁始終被寫成腳本并解釋。 頁比非托管 ASP 頁更快、更實用并且更易于開發(fā),這是因為它們像所有托管應用程序一樣與運行庫進行交互。.NET 框架還提供類和工具的集合來幫助開發(fā)和使用 XML Web services 應用程序。XML Web services 是基于 SOAP(一種遠程過程調用協(xié)議)、XML(一種可擴展的數據格式)和 WSDL(Web 服務描述語言)這些標準生成的。基于這些標準生成 .NET 框架的目的是為了提高與非 Microsoft 解決方案的互操作性。例如,.NET 框架 SDK 所包含的Web 服務描述語言工具可以查詢在 Web 上發(fā)布的 XML Web services,分析它的 WSDL 描述,并產生 C 或 Visual Basic 源代碼,您的應用程序可以使用這些代碼而成為 XML Web services 的客戶端。這些源代碼可以創(chuàng)建從類庫中的類派生的類,這些類使用 SOAP 和 XML 分析處理所有基礎通訊。雖然您可以使用類庫來直接使用 XML Web services,Web 服務描述語言工具和包含在 SDK 中的其他工具可以使您更加方便地用 .NET 框架進行開發(fā)。如果您開發(fā)和發(fā)布自己的 XML Web services,.NET 框架為您提供了一組符合所有基礎通訊標準(如 SOAP、WSDL 和 XML)的類。使用這些類使您能夠將注意力集中在服務的邏輯上,而無需關注分布式軟件開發(fā)所需要的通訊基礎結構。最后,與托管環(huán)境中的 Web 窗體頁相似,您的 XML Web services 將使用 IIS 的可伸縮通訊以本機語言的速度運行。[14]第四節(jié) C概述! 它提供了一套公共的運行庫!并制定了一套公共語言規(guī)范!所有符合該規(guī)范的語言都可以無縫使用這套運行庫! 應用程序。(C Sharp)和Visual 。由于C 。它從C/C++ 演變而來。微軟公司力薦開發(fā)者使用C,下面我們就看看C語言的有關知識。[1]1 C簡介C(讀作“C sharp”)是一種簡單、現代、面向對象且類型安全的編程語言。C和C++程序員能很快熟悉它。C同時具備“應用程序快速開發(fā)”(RAD)語言的高效率和 C++ 固有的強大能力。Visual C .NET是Microsoft的C開發(fā)工具。它包括交互式開發(fā)環(huán)境、可視化設計器(用于生成 Windows 和 Web 應用程序)、編譯器和調試器。Visual C.NET 是Visual Studio .NET的產品套件的組成部分,該產品套件還包括 Visual 、Visual C++.NET和JScript腳本語言。所有這些語言都支持對 Microsoft .NET Framework的訪問,該框架包括一個公共執(zhí)行引擎和一個豐富的類庫。.NET Framework定義了一個“公共語言規(guī)范”(CLS),這是一種通用規(guī)范,它確保遵循該規(guī)范的語言與類庫之間實現無縫的互操作性。對C開發(fā)人員而言,這意味著即C是一種新語言,但仍可恰如其他成熟工具(如 Visual 和Visual )一樣,使用相同的、功能豐富的類庫。C 本身不包含類庫。[5]2 C的主要特點(1)簡單性C首先是一個簡單的語言。它加入了許多新的特征,但同時也為了提供簡單性,也舍棄了一些語言的特性。C++的編程是很復雜的。舉個簡單的例子,對于“—〉”和“::”以及“.”操作符,分別用于引用,名字空間和成員等操作。C意識到了C++編程中這個煩人的地方。C去掉了別的操作符,所有的操作符都用“.”表示。程序員只需理解名字嵌套的概念就可以了。C程序中使用一種受管代碼,所有對象的分配釋放都是由公共語言運行時替你完成的,不安全操作,諸如直接內存存取是不允許的。這樣就消除了懸掛指針,內存泄漏,循環(huán)引用等問題。值得一提的是,C還可繼續(xù)使用指針,可以通過unsafe代碼。這也體現了C的靈活性。Unsafe代碼恰如其分的表示了它本身的含義。大多數情況下不建議使用unsafe代碼,但在一些需要高性能程序或本地資源訪問時可以使用。執(zhí)行unsafe代碼需要一個很高的安全許可,畢竟它是不安全的。C和C編程中的另一個煩人的地方就是選擇使用的數據類型。C中,一個UNICODE 的字符不再是 wchar_t,它就代表一個字符。64位的整形是long型,而不是__int64,字符就是字符,不再需要對char, unsigned char, signed char, wchar_t作出區(qū)別。C和C++編程中還有一個令人困擾的地方,就是整形可以當作布爾值使用,而且程序員經常把==錯寫成=。C對兩者進行了區(qū)分。C提供了一個單獨的bool類型來表示bool值,可以為true也可以為false,但是不可以轉換為其他類型。同樣,整形和對象引用也不可以當作布爾值使用,只能和0或null比較。這意味著if判別式中的結果只能是bool類型。如果是其他類型的話,編譯器將會做出錯誤報告。對C++另一個改進就是switch語句了。C++程序中如果switch語句中的case語句沒有break結尾的話,將繼續(xù)執(zhí)行直到遇到break或跳出程序塊。C和VB類似,在每一個case語句中隱含加入了break語句,但如果確實像往下繼續(xù)執(zhí)行的話,可以使用goto語句。簡單性的另一個體現是一步到位的編碼。C程序中所有元素的聲明和實現合為一體在同一個源文件中,不再需要額外的頭文件或IDL文件中對他們進行聲明;性質的get/set方法被合并;程序的文檔信息也嵌在程序中;程序員只要維護一個文件就夠了。如果項目太大且程序員想把它分成幾個小一些的源文件。那編譯時候仍可把它當作整個項目來看待。程序員不用關心聲明在哪里和某個類在哪里實現的問題。(2)類型系統(tǒng)的統(tǒng)一性C統(tǒng)一了類型統(tǒng)一。C中所有類型,不論是基本類型,還是普通的class類,都可作為對象看待。這種機制在其他語言中也曾經有過。但C提供的脫匣和裝匣的機制降低了執(zhí)行的難度。不論使用的是類class,結構struct,數組array,或是簡單類型,都可以把他們當作對象。這個類型統(tǒng)一的系統(tǒng)意味著所有類型—接口,結構,委派,枚舉,和數組,都有相同的基本功能,例如轉化成字符串,序列化,在集合類型中存儲 。對象包含在名字空間中,可以編程訪問。這樣就不必手動編寫很多include語句來包含頭文件,只需使用using 語句包含相應的名字就可以使用其中的類了。使用名字空間也可以省去類的前綴。那如何編寫自己的類呢?只要把自己的類包含進名字空間即可。例如編寫了一個類MyClass,想在另一個應用中使用,那可以聲明一個空間MyNamespaces,并把MyClass包含進該名字空間,同時聲明MyClass為公有的Public的。然后編譯成DLL,并把DLL放入應用程序所在的目錄下,最后在使用MyClass的應用中用using MyNamespace包含進自定義的名字空間就可以了。如果覺得類的引用字符串太長(),那麼可以在C中使用別名來替代它。例如使用using A=,是不是有點像C++中的宏。(3)現代性從編程語言出現的第一天起,程序員的需求就不斷在增加。雖然不斷有新的語言,新的技術增加,但是仍舊或多或少的滿足不了程序員的需要。功能強大的C和C++同樣有不盡人意的地方。C提供了C和C++程序員一直夢想的幾個特征,垃圾回收就是一個例子。程序員不再負責整個內存的管理。.NET平臺運行環(huán)境提供了一個垃圾回收器負責C程序的內存管理,不被引用的對象都將被自動釋放。然而,垃圾回收時要付出代價的。風險操作如指針(unsafe代碼)錯誤將更難發(fā)現,對程序員的潛在威脅更大。對于這種情況C引入了類型安全性來增加程序的穩(wěn)定性,同時也增加了程序的可讀性。C提供了比C++更好的一個錯誤處理模型。你是否有這樣的經驗:在調用別人的代碼時,到處都是沒有處理的HRESULT值。如果這個調用失敗,程序也將返回一個簡單的信息“錯誤!”后就退出了,一個現代語言是不允許出現這種情況的。C提供了內建的語言支持包括try…catc