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