.NET概觀
2024-07-10 12:57:47
供稿:網(wǎng)友
 
這篇文章很多地方借鑒了david chappell的《understanding .net》和其他的一些網(wǎng)上的文章,但是也有一些我自己的文字。寫(xiě)這篇文章的本意是希望能用一些較少的文字能給讀者對(duì).net一個(gè)全面的、但是并不深入的印象。這里謹(jǐn)對(duì)《understanding.net》的作者david chappell及譯者侯捷、榮耀還有其他的作者們表示感謝!
.net概觀
微軟.net的出現(xiàn),可以說(shuō)是一場(chǎng)地震。它將震撼windows環(huán)境下工作的任何人,同時(shí)也將在范圍更廣的世界里產(chǎn)生余震。微軟一次性的帶給我們那么大的變化,要我們適應(yīng)它,短期來(lái)看,將使我們的日子更加難過(guò),畢竟要學(xué)的東西太多!然而一段我們掌握了這套新工具和新技術(shù),大多數(shù)windows開(kāi)發(fā)人員將會(huì)發(fā)現(xiàn),他們有能力在更短的時(shí)間內(nèi)構(gòu)建數(shù)更具威力、更有用的軟件。
一. 什么是.net
.net是一個(gè)施用于一系列技術(shù)上的商標(biāo)
微軟將.net視為數(shù)字化未來(lái)的一個(gè)遠(yuǎn)景和平臺(tái)。如果更具體更準(zhǔn)確地看待這種創(chuàng)新,則是把.net視為一個(gè)商標(biāo),一個(gè)微軟已經(jīng)施行于數(shù)種不同技術(shù)上的商標(biāo)。這些技術(shù)有些是全新的,提供新的服務(wù)和新的可能性,另一些則允許我們以最新的方式來(lái)創(chuàng)建我們今天已經(jīng)知道的各類windows應(yīng)用程序。當(dāng)然,也有一些.net家族成員只不過(guò)是裝飾著.net牌子的現(xiàn)有技術(shù)的新版本而已。
.net是軟件成為一種服務(wù)的轉(zhuǎn)移
.net在這個(gè)方面的意義是最被廣泛接受和理解的。“軟件就是服務(wù)”的歷年最初是在 
1997年左右由oracle的ceo larry ellison以及sun的ceo scott mcnealy在網(wǎng)絡(luò)計(jì)算機(jī)的概念大行其道的時(shí)候提出的。不過(guò)oracle和sun并沒(méi)有真正將這個(gè)概念變?yōu)楝F(xiàn)實(shí),他們的視角更多的集中于資源集中化方面。不過(guò),當(dāng)初聽(tīng)到ellison和mcnealy這番見(jiàn)解的公司——當(dāng)然包括microsoft,也認(rèn)識(shí)到了這種見(jiàn)解說(shuō)出了軟件產(chǎn)業(yè)面臨的一個(gè)巨大改變,.net則是microsoft對(duì)這種概念,這種變化作出的自己的反應(yīng)。
.net是一個(gè)新的編程模型——也就是說(shuō)是internet平臺(tái)
micorsoft正在趨向于將.net看作一個(gè)系統(tǒng)。在表面下,它包含了兩種不同的編程模型:一個(gè)是web服務(wù)編程模型,另一個(gè)是系統(tǒng)編程模型。 
microsoft開(kāi)始把.net系統(tǒng)編程模型作為.net整體的一個(gè)組成部分。計(jì)劃最終以此代替現(xiàn)有的組件對(duì)象模型(component object model,com)以及windows應(yīng)用程序編程接口(apis),這個(gè)現(xiàn)在還沒(méi)有最終正式定名的模型使用一系列新的基礎(chǔ)類。
 
.net之中最重要的新技術(shù)首推web services。如其名稱所示,web services提供了某些功能,讓我們得以通過(guò)網(wǎng)絡(luò)加以調(diào)用。大多數(shù)頂著.net商標(biāo)的技術(shù)都可以在某種程度上直接支持web services。然而.net絕非僅僅是web services而已,微軟置于.net商標(biāo)傘下的技術(shù)包括:
.net framework:包括通用語(yǔ)言運(yùn)行層(common language runtime,clr)和.net框架類庫(kù)。clr是建造一系列新應(yīng)用程序的標(biāo)準(zhǔn)基礎(chǔ),.net類庫(kù)則為許多基于clr的應(yīng)用程序提供一個(gè)新的標(biāo)準(zhǔn)開(kāi)發(fā)環(huán)境。這個(gè)類庫(kù),包含的技術(shù)有:asp.net,最新一代的asp(active server pages)技術(shù);ado.net,最新一代的ado(activex data objects)技術(shù);以及對(duì)“構(gòu)建和使用web services”的支持等等。微軟還發(fā)行了一個(gè).net framework精簡(jiǎn)版,名為.net compact framework,用于小型設(shè)備如個(gè)人數(shù)字助理(personal digital assistants,pdas)上。
visual studio.net:支持多種可使用.net framework的編程語(yǔ)言,包括visual basic;一個(gè)增強(qiáng)版的c++;一個(gè)基于.net的java替代語(yǔ)言j#,以及一個(gè)為.net framework量身打造的全新語(yǔ)言c#。
.net my services:一組服務(wù),允許用戶存儲(chǔ)和訪問(wèn)位于互聯(lián)網(wǎng)可達(dá)之服務(wù)器上的個(gè)人信息,例如日程表和地址簿等等。這些服務(wù)還提供諸如認(rèn)證(autherntication)這樣的通用功能,使客戶能夠證明自己的身份;也提供了一個(gè)“向不同設(shè)備上的客戶發(fā)送消息”的方式。
.net enterprise servers:這是一系列軟件服務(wù)器,包括、exchange server 2003、sharepoint server 2003、project server 2003、biztalk server2000,application center 2000、commerce server 2000、host integration server 2000、sql server 2000等等。除了幾個(gè)叫2003的產(chǎn)品外,其他的很大程度上與這里說(shuō)的.net技術(shù)沒(méi)有什么關(guān)聯(lián),但是顯而易見(jiàn),在未來(lái)的版本當(dāng)中,他們將全部基于.net技術(shù)構(gòu)建,上面幾個(gè)叫2003的版本已經(jīng)證明了這一點(diǎn)。
二. .net的特點(diǎn)
1. 高效率開(kāi)發(fā)
通過(guò).net framework為我們提供的一個(gè)龐大而有結(jié)構(gòu)清晰的類型,使得我們的編程變得異常輕松,還有自動(dòng)垃圾回收機(jī)制等等一系列新的特性,可以讓我們的程序員騰出更多的精力放在考慮如何實(shí)現(xiàn)客戶所需要的業(yè)務(wù)邏輯上,而不是計(jì)算機(jī)的控制上為內(nèi)存如何分派之類的事情頭痛。甚至無(wú)論你是開(kāi)發(fā)哪一種應(yīng)用程序,無(wú)論是c/s、b/s、還是智能設(shè)備亦或是數(shù)據(jù)庫(kù)編程,都可以使用你最熟悉的一種編程語(yǔ)言而不需要去學(xué)習(xí)諸如c++、asp、sql等等各不相同的多用語(yǔ)言。.net還帶來(lái)了多種語(yǔ)言之間的無(wú)縫集成,例如一個(gè)系統(tǒng)同時(shí)可以采用多用編程語(yǔ)言來(lái)開(kāi)發(fā),vb.net編寫(xiě)的類可以方便的再用c#繼承。這些都大幅了提高我們的開(kāi)發(fā)效率。
2. 多平臺(tái)特性
盡管不可否認(rèn),到目前為止.net應(yīng)用程序還只能運(yùn)行于windows平臺(tái)上,但.net天生就為跨平臺(tái)應(yīng)用做好了準(zhǔn)備,據(jù)我們所知,微軟自己還有第三方開(kāi)發(fā)商已經(jīng)在為.net程序運(yùn)行在unix、os2、linux等等系統(tǒng)上工作著(如開(kāi)源項(xiàng)目mono)。我們還可以看到我們的.net應(yīng)用程序?qū)⒖梢赃\(yùn)行在pda甚至手機(jī)上。不久的將來(lái),我們將可以只關(guān)心我們的應(yīng)用程序?qū)⑷绾螡M足客戶的需求而不用考慮基于何種平臺(tái)來(lái)開(kāi)發(fā)。
3. 無(wú)接觸部署
借助于.net的反射特性,.net應(yīng)用程序都可以精確的描述自身。這就使得無(wú)接觸部署成為可能,.net應(yīng)用程序無(wú)需在注冊(cè)表中儲(chǔ)存信息,只需簡(jiǎn)單的xcopy便可正確的在用戶的機(jī)器上運(yùn)行,這使得企業(yè)的部署成本將會(huì)大為降低。
4. 消除dll hell
同樣是基于.net的反射特性,每一個(gè)應(yīng)用程序?qū)⒖梢郧宄刂雷约盒枰褂媚囊粋€(gè)dll,同一個(gè)dll的不同版本可以彼此和平共處,從而徹底消除讓我們頭痛的dll hell。
5. 可信賴計(jì)算
長(zhǎng)期以來(lái),微軟系統(tǒng)的安全性問(wèn)題一直備受詬病。但終于,比爾蓋茨決定改變這種現(xiàn)狀。在.net中,這種安全性的考慮直接放到了代碼級(jí)。通過(guò)一系列的技術(shù),如代碼訪問(wèn)安全(code access security)、基于角色的安全、強(qiáng)名稱(strong name)、權(quán)限和權(quán)限集等等,最大限度地保證了系統(tǒng)的安全性。
三. .net framework體系結(jié)構(gòu)
.net是分層的、模塊化的,一及層次結(jié)構(gòu)化的。.net framewok的每一層都是一個(gè)抽象層。其中,.net語(yǔ)言是頂層,也是最為抽象的一層。而公共語(yǔ)言運(yùn)行庫(kù)則位于底層,它是最不抽象、最靠近本地環(huán)境的一層。這一點(diǎn)很重要,因?yàn)楣舱Z(yǔ)言運(yùn)行庫(kù)需要與操作環(huán)境緊密合作來(lái)管理.net應(yīng)用程序。.net framework被分成了多個(gè)模塊,每個(gè)模塊都有它們各自特定的責(zé)任。最后由于高層只從底層請(qǐng)求服務(wù),所以.net又是層次結(jié)構(gòu)化的。
四. webservices(web服務(wù))
要想透徹理解.net,就必須透徹理解web services,還必須領(lǐng)會(huì)剛剛列舉出來(lái)的每一種.net技術(shù)的基本要素。
今天,web應(yīng)用程序的典型訪問(wèn)方式為gui
近十年來(lái),軟件世界沒(méi)有什么比interne和www帶來(lái)的沖擊更大。區(qū)區(qū)20年以前,還是大型機(jī)的時(shí)代。那時(shí)只有極少數(shù)人能夠使用計(jì)算機(jī),而且只能通過(guò)鄰近的信息產(chǎn)業(yè)機(jī)構(gòu)。個(gè)人電腦和圖象化用戶界面的出現(xiàn)卻改變了一切,將計(jì)算機(jī)普及到了千家萬(wàn)戶,并使它真正成為一種可以大工業(yè)生產(chǎn)的商品。企業(yè)界意識(shí)到,由個(gè)人電腦聯(lián)結(jié)的網(wǎng)絡(luò)和基于個(gè)人電腦的服務(wù)器可能改變他們的商務(wù)模式,而個(gè)人電腦對(duì)消費(fèi)者來(lái)說(shuō)也迅速地成為新興的娛樂(lè)媒介。然后,因特網(wǎng)接踵而至。它革命性地改變了我們的交流方式,創(chuàng)造了豐富而新穎的信息和娛樂(lè)資源,并且在“商務(wù)”的前面加上了一個(gè)代表“電子”的字母“e”。今天,全球有將近三億人口正在使用因特網(wǎng)。國(guó)際數(shù)據(jù)集團(tuán)提供的資料顯示,今年全球的網(wǎng)上交易金額將超過(guò)250億美元。world wide web已經(jīng)從根本上改變了我們?cè)L問(wèn)信息、購(gòu)物、找工作以及日常生活的方式。他通過(guò)具有圖形界面(gui)的應(yīng)用程序很人們直接互動(dòng)而做到這一切。毫不夸張地說(shuō),以gui為主的應(yīng)用程序,造就了web的今天。
然而,gui不是web的全部,web services代表了web的未來(lái)
以gui為主的應(yīng)用程序可能就不再是下一階段web的交通工具了。面對(duì)這些網(wǎng)絡(luò)神話,我們?nèi)匀话l(fā)現(xiàn)存在著巨大的改進(jìn)空間。今天的因特網(wǎng)在很大程度上還在模仿舊式大型計(jì)算機(jī)的工作方式。盡管有充足的帶寬資源,大量的信息還是被“鎖”在了中央數(shù)據(jù)庫(kù)里,并由“保安人員”看守。用戶必須依靠網(wǎng)絡(luò)服務(wù)器來(lái)完成所有的上網(wǎng)操作,這酷似老式的分時(shí)復(fù)用系統(tǒng)。網(wǎng)站好象一個(gè)個(gè)孤立的小島,并不能按照用戶的指令在它們之間進(jìn)行有意義的交流。今天的網(wǎng)絡(luò)似乎只能通過(guò)單個(gè)的網(wǎng)站向單個(gè)用戶提供有限的服務(wù) -- 因?yàn)榇蠖鄶?shù)的網(wǎng)頁(yè)只能呈現(xiàn)html格式的數(shù)據(jù)“圖片”,而非信息本身。(對(duì)大多數(shù)網(wǎng)頁(yè)來(lái)說(shuō),在現(xiàn)有技術(shù)條件下要兩者兼顧是非常困難的。)非但如此,瀏覽器本身在很多方面都只是一個(gè)被美化了的“啞巴只讀終端”-- 你可以輕易地瀏覽信息,但是很難進(jìn)行編輯、分析和復(fù)制(實(shí)際上也就是知識(shí)工作者需要做的所有工作)。“個(gè)性化”只意味著重復(fù)地進(jìn)入網(wǎng)站,并不斷地將個(gè)人隱私泄露給你所訪問(wèn)的每一個(gè)網(wǎng)站。你必須適應(yīng)科技,而不是科技反過(guò)來(lái)適應(yīng)你的要求。我們希望我們能通過(guò)多種方式來(lái)獲取信息,而不僅僅是瀏覽器。如果提供這些web服務(wù)的應(yīng)用程序可以由外界通過(guò)編程來(lái)訪問(wèn),那么外界就可以更容易且更有效率的使用這套重要的服務(wù)。用微軟的話說(shuō),“一切都是服務(wù)”。這些網(wǎng)絡(luò)服務(wù)的客戶可以不再是坐在瀏覽器前面的人,而是運(yùn)行在桌上電腦、移動(dòng)電話或其他設(shè)備上的軟件。客戶軟件可以通過(guò)多種方式來(lái)調(diào)用那些應(yīng)用程序的遠(yuǎn)程操作,并使用xml(extensible markup language)傳輸信息。換句話說(shuō),這用應(yīng)用程序可以用“web services方式”加以訪問(wèn)。
web services可被應(yīng)用于很多方面
這種技術(shù)可應(yīng)用于很多方面。它可用來(lái)讓桌面客戶或手持設(shè)備客戶訪問(wèn)internet上的應(yīng)用程序,利于預(yù)定系統(tǒng);也可以用于b2b整合,通過(guò)internet連接不同企業(yè)組織的應(yīng)用程序。web services甚至還可能用于企業(yè)應(yīng)用整合,從而將企業(yè)組織“原本運(yùn)行于專用網(wǎng)絡(luò)上”的應(yīng)用程序連接起來(lái)。所有這些案例中,web services技術(shù)都為型型色色的軟件小模塊提供了“標(biāo)準(zhǔn)膠水”。
xml web services是完全公開(kāi)的,可以通過(guò)任何平臺(tái)實(shí)現(xiàn)。.net my services 是xml web services的一個(gè)具體實(shí)現(xiàn),通過(guò)xml web services的方式來(lái)傳輸數(shù)據(jù),具體地說(shuō),就是通過(guò)以xml描述的soap消息來(lái)實(shí)現(xiàn)信息的交流,而soap消息可以通過(guò)http或者dime(direct internet message encapsulation,直接internet消息封裝)協(xié)議來(lái)傳遞。xml web services的工作原理如圖所示。結(jié)合microsoft .net passport用戶身份認(rèn)證系統(tǒng),.net my services能夠以用戶為中心將應(yīng)用程序和服務(wù)高效集成,并實(shí)現(xiàn)個(gè)體和組織的協(xié)作與信息共享。 
 
web services以來(lái)的四種基礎(chǔ)技術(shù):
web services技術(shù)可以分解為四個(gè)獨(dú)立領(lǐng)域,每一個(gè)領(lǐng)域都解決了問(wèn)題的某個(gè)特定方面。
描述“經(jīng)由網(wǎng)絡(luò)發(fā)送的信息”:調(diào)用一個(gè)遠(yuǎn)程操作時(shí),往往必須傳入一些參數(shù),并取回某些信息。如果使用web services,這些信息必須以xml描述。作為一種被普遍接受用以描述數(shù)據(jù)的現(xiàn)代通用語(yǔ)言,xml可以描述和交換不同種類的信息。
定義“web services能力”:必須存在某種機(jī)制,使web services供應(yīng)者能夠精確定義他所提供的services的技術(shù)細(xì)節(jié),并且能夠被服務(wù)的接受者所理解。這由web services描述語(yǔ)言(wsdl)完成。而wsdl自身也是采用xml來(lái)定義的。
訪問(wèn)web services:一旦定義好接口,客戶必須使用某種協(xié)議調(diào)用該接口內(nèi)的操作。這里并不存在什么專用協(xié)議,然而最重要的選擇是soap(simple object access protocol)。soap提供一個(gè)辦法,可以標(biāo)識(shí)出“將調(diào)用那一個(gè)操作”:他以“采用xml定義完成的數(shù)據(jù)”傳輸操作的輸入,并同樣以“采用xml定義完成的數(shù)據(jù)”回傳任意結(jié)果。
找出web services:對(duì)運(yùn)用web services開(kāi)發(fā)客戶端程序的人員來(lái)說(shuō),必須存在某種方式,讓他們知道可以獲得什么樣的服務(wù),讓他們知道web service提供了些什么?其接口看起來(lái)是什么模樣?考慮到internet的存在,建立一個(gè)標(biāo)準(zhǔn)的registy用以存儲(chǔ)和訪問(wèn)信息是很合理的。這正是uddi(universal description,discovery,and integration)技術(shù)所作的事情。使用uddi,web services供應(yīng)者便可以用標(biāo)準(zhǔn)方式對(duì)他們所提供的東西廣而告之,使客戶得以獲悉各家供應(yīng)商提供了些什么服務(wù),并讓客戶知道,為了開(kāi)發(fā)客戶端軟件,他們需要了解些什么。
web services是通用的:any time,any where
以上每一種技術(shù)都是由成群的廠商和用戶彼此協(xié)作而開(kāi)發(fā)出來(lái)的。比如xml是world wide web協(xié)會(huì)(w3c)資助的一個(gè)大型團(tuán)體開(kāi)發(fā)出來(lái)的,wsdl主要由microsoft和ibm開(kāi)發(fā)出來(lái),soap原先由microsoft、ibm、userland software、developmentor,其他一些團(tuán)體也扮演了一定的角色。uddi原先由microsoft、ibm和ariba開(kāi)發(fā),后來(lái)又有更多組織加入,共同努力。沒(méi)有任何一個(gè)seb services技術(shù)源自單一廠商提供的解決方案。因此,奠基于xml、wsdl、soap和uddi之上的web services實(shí)質(zhì)上可用于所有平臺(tái)、所有語(yǔ)言和所有對(duì)象模型。再加上web services的無(wú)與倫比的穿越防火墻的能力,無(wú)論何時(shí)、無(wú)論何地、也無(wú)論你的系統(tǒng)是架構(gòu)于windows、unix、mac或者linux甚至ppc、palm之上,只要有internet,您就能享受web services提供給您的服務(wù)。
應(yīng)用web services
web services幾乎可以用在任何場(chǎng)合。最顯而易見(jiàn)的用途分為三類:
允許經(jīng)由internet,以可編程方式訪問(wèn)應(yīng)用程序:這樣你就可以不必受限于瀏覽器了,你可以使用選擇更有效率的方式來(lái)完成,通過(guò)一個(gè)適合客戶端設(shè)備的界面,你可以表達(dá)你的意愿,并貫徹你的意愿。microsoft .net意味著簡(jiǎn)單化的整體服務(wù);統(tǒng)一的信息瀏覽、編輯和授權(quán);查看你的資料、工作和在線與離線媒體;一種整體的系統(tǒng)方案;隨時(shí)隨地的個(gè)性化;絕對(duì)的自由。例如,對(duì)于你個(gè)人信息的任何修改 -- 無(wú)論是通過(guò)個(gè)人電腦、便攜設(shè)備還是靈通卡 -- 將即時(shí)和自動(dòng)地通知到所有需要這些信息的地方。例如你可以隨時(shí)隨地通過(guò)你喜歡的方式來(lái)在網(wǎng)上預(yù)訂機(jī)票,而不僅僅是訪問(wèn)航空公司的網(wǎng)站。
以這種方式訪問(wèn)web services,還引發(fā)另一種可能性:為何不讓某些service為其供應(yīng)者(公司)創(chuàng)造營(yíng)收呢?正如奠基于瀏覽器之上的web應(yīng)用程序支撐新式商業(yè)模型,從而帶來(lái)internet大爆炸一樣,web services也能為他們的供應(yīng)者帶來(lái)新的賺錢(qián)方式。雖然你的牙醫(yī)不可能因?yàn)槟阕隽艘粋€(gè)預(yù)約就向你收費(fèi),但有些服務(wù)確實(shí)肯定要收費(fèi)的。
b2b整合:web services的另一個(gè)重要應(yīng)用是b2b整合,一般來(lái)說(shuō)它也依賴于internet,將運(yùn)行于不同企業(yè)組織中的軟件連接起來(lái)。就目前來(lái)說(shuō),各個(gè)企業(yè)的軟件在internet的海洋里還像是一個(gè)一個(gè)的信息孤島,要連接起來(lái)還需要專門(mén)而特別的方法。其原因是多方面的,平臺(tái)不同、軟件不同、防火墻……等等這一些限制了彼此之間的連接,html雖然是通用而標(biāo)準(zhǔn)的,可是那只適合人看,想要交程序去理解網(wǎng)頁(yè)中包含的信息,那是難上加難。而web services則提供了一個(gè)通用而標(biāo)準(zhǔn)的方式,使得這不再只是個(gè)美好的夢(mèng)。可以想象,web services在企業(yè)協(xié)作比如供應(yīng)鏈管理等等方面將發(fā)揮出它神奇的作用。
a2a整合:許多企業(yè)組織最困難的問(wèn)題就是如何將現(xiàn)有應(yīng)用程序連接在一起。不論規(guī)模如何,每家公司都有一些以不同語(yǔ)言在不同時(shí)間編寫(xiě)出來(lái)的軟件,混合運(yùn)行于不同系統(tǒng)上。將這些繁雜的應(yīng)用程序聯(lián)合為一個(gè)有用整體,已經(jīng)是這些公司面臨的巨大挑戰(zhàn)之一,更別說(shuō)為這個(gè)混合怪獸加上新程序了。而web services則為這個(gè)惱人的a2a整合問(wèn)題提供了一個(gè)有效的解決方案,直截了當(dāng)?shù)恼f(shuō),web services為這個(gè)五花八門(mén)的環(huán)境提供了一盒不錯(cuò)的萬(wàn)能膠。
web services的未來(lái)一片光明
web services無(wú)疑是個(gè)好點(diǎn)子。他讓許多廠商開(kāi)放的services得以運(yùn)行于跨越intranet和internet的所有平臺(tái)上,并因此帶來(lái)一種新的開(kāi)放世界的方式。web services底層蘊(yùn)含的技術(shù)——xml、wsdl、soap、uddi——都是相對(duì)較新的技術(shù)。盡管這些技術(shù)的資歷并不深,但它們都被多家廠商支持,并且看起來(lái)都有可能在將來(lái)的分布式計(jì)算環(huán)境中發(fā)揮重要作用。奠基于瀏覽器之上的應(yīng)用程序,造就了web璀璨的今天,而web services則可能成就出更美好的明天。并由此,將給我們帶來(lái)一個(gè)全新的理念:一切都是服務(wù)。
五. common language runtime(通用語(yǔ)言運(yùn)行層)
.net framework中的任何東西都依賴clr
通用語(yǔ)言運(yùn)行層(clr,common language runtime)是.net framework之中任何東西的基礎(chǔ)。要想透徹理解.net語(yǔ)言如c#和visual basic.net,你必須理解clr;要想透徹理解.net framework類庫(kù)如asp.net和ado.net以及其他東西,你也必須理解clr。由于.net framework已經(jīng)成為微軟新軟件的默認(rèn)基礎(chǔ),所以任何打算在微軟環(huán)境下工作的人,都應(yīng)該努力把握clr。
clr定義了哪些東西
一般而言每一門(mén)語(yǔ)言都有自己的一套獨(dú)特語(yǔ)法、一套控制結(jié)構(gòu)、一道數(shù)據(jù)類型(data types),以及一套“class如何繼承”的概念。語(yǔ)言設(shè)計(jì)這所作的決策,會(huì)受其目標(biāo)應(yīng)用程序(target applications)的影響,也就是說(shuō),“語(yǔ)言使用者可能拿這個(gè)語(yǔ)言來(lái)干什么”會(huì)影響語(yǔ)言當(dāng)初的設(shè)計(jì)。當(dāng)然,語(yǔ)言設(shè)計(jì)者也難免摻雜個(gè)人感情因素。
然而,對(duì)于一門(mén)現(xiàn)在編程語(yǔ)言應(yīng)該提供些什么成分,大多數(shù)人都會(huì)達(dá)成共識(shí)。盡管與方面的意見(jiàn)會(huì)不同意,但語(yǔ)義方面大家有普遍的一致意見(jiàn)。于是,
clr定義了一套可被多種語(yǔ)言使用的通用語(yǔ)義集
clr還提供了其他通用服務(wù):
garbage collection(垃圾回收),自動(dòng)釋放不再被引用的受控對(duì)象
metadata(元數(shù)據(jù))標(biāo)準(zhǔn)格式。每一個(gè)類型的信息都存儲(chǔ)在該類型編譯后的代碼里。這和com不同,不再有獨(dú)立的類型庫(kù)(type libraries),也不再需要idl。如今的interfaces和classess直接使用開(kāi)發(fā)人員所采用的任何編程語(yǔ)言來(lái)定義,而后再被轉(zhuǎn)換成metadata標(biāo)準(zhǔn)格式。
一個(gè)通用體制(common scheme),用以組織編譯后的代碼(稱為裝配件,assemblies)。裝配件可以由一個(gè)或多個(gè)動(dòng)態(tài)鏈接庫(kù)(dynamic link libraries,dlls)和/或可執(zhí)行文件(executables,exes)構(gòu)成,并內(nèi)含他所包含之classes的metadata。單一應(yīng)用程序可使用來(lái)指一個(gè)或多個(gè)裝配件的代碼,因此,每一個(gè)裝配件都可以明確描述他所依賴的其他裝配件。
何謂受控代碼(managed code)
建立于clr之上的軟件,稱為受控代碼(managed code),clr提供了好幾樣?xùn)|西,用來(lái)創(chuàng)建和運(yùn)行這種特殊代碼。最基礎(chǔ)的東西是一套可被clr-based語(yǔ)言所使用標(biāo)準(zhǔn)型別集(standard format for metadata),那是“以標(biāo)準(zhǔn)型別建造而成的軟件”的相關(guān)信息。clr還提供受控代碼的打包(packaging)技術(shù)和一個(gè)用以運(yùn)行受控代碼的運(yùn)行期環(huán)境。
開(kāi)發(fā)受控代碼:通用型別系統(tǒng)(cts)
cts定義了核心語(yǔ)義,但沒(méi)有定義語(yǔ)法。cts并不規(guī)定特定語(yǔ)法或關(guān)鍵字,只是定義了一套通用型別,他們可用于許多語(yǔ)言的語(yǔ)法上。每一種語(yǔ)言都可以自由定義他所希望的任何語(yǔ)法,但如果某個(gè)語(yǔ)言點(diǎn)基于clr之上,它將至少使用cts定義的一部分型別。
clr-based語(yǔ)言以不同的方式來(lái)顯露cts types。cts定義的一整套types在clr中聚核心位置。奠基于crl之上的編程語(yǔ)言以一種語(yǔ)言相依方式來(lái)顯露這些types。盡管一個(gè)clr-based語(yǔ)言創(chuàng)造者可以自由實(shí)現(xiàn)cts定義之types的任何子集,或甚至加入自己的types,但大多數(shù)clr-based語(yǔ)言還是廣泛的采用了cts所定義的types。
cls:通用語(yǔ)言規(guī)范(common language specification)
cts定義了一套相當(dāng)龐大也相當(dāng)復(fù)雜的types,但并不是所有的這些types對(duì)所有語(yǔ)言都有意義。clr的一個(gè)關(guān)鍵目標(biāo)就是允許開(kāi)發(fā)人員以某種語(yǔ)言撰寫(xiě)代碼,并以另一種語(yǔ)言調(diào)用這些代碼。但是除非兩種語(yǔ)言都以同樣的方式支持相同的types,否則別想成功。然后如果讓每一種語(yǔ)言都實(shí)現(xiàn)出每一種cts types,對(duì)語(yǔ)言涉及者來(lái)說(shuō)也消受不起。
這個(gè)難題的一個(gè)折中解決方案就是cls。cls定義了一個(gè)龐大的cts子集,任何語(yǔ)言如果想和其他cls語(yǔ)言互通(互操作),就必須準(zhǔn)從它。cls定義的是cts的一個(gè)子集,是“跨語(yǔ)言互操作性”成為可能。
編譯受控代碼(compiling managed code)
受控代碼經(jīng)過(guò)編譯會(huì)生成msil(microsoft intermediate language,微軟中間語(yǔ)言)和metadata(元數(shù)據(jù))。無(wú)論受控代碼一開(kāi)始是由什么語(yǔ)言寫(xiě)的,編譯器都會(huì)將受控代碼中的所有types-class、structs、intergers、delegates機(jī)其他東西,統(tǒng)統(tǒng)裝換成msil和metadata。
微軟中間語(yǔ)言(microsoft intermediate language,msil)
msil和處理器原生指令集(processor’s native instruction set)很相似。不過(guò)并不存在用以運(yùn)行這些指令的硬件,至少今天如此。msil代碼總是在運(yùn)行前先被編譯為它將運(yùn)行于其上的處理器的原生代碼——不論哪一種處理器都如此。
事實(shí)上msil是clr的匯編語(yǔ)言。在上述描述中你可以發(fā)現(xiàn):clr所定義的是一個(gè)stack-based抽象機(jī)(abstract machine),這意味著很多msil操作是依據(jù)這個(gè)stack來(lái)定義的。msil指令集緊密地和clr cts進(jìn)行映射。
元數(shù)據(jù)(metadata)
metadata描述含于模塊中的types的相關(guān)信息,包括:
type的名稱
type的可見(jiàn)性,可為public或assembly
這個(gè)type繼承自什么型別(如果有的話)
這個(gè)type所實(shí)現(xiàn)的任何interfaces(接口)
這個(gè)type所實(shí)現(xiàn)的任何methods
這個(gè)type所暴露的任何properties(屬性)
這個(gè)type所暴露的任何events(事件)
此外還可以獲得更多的詳細(xì)信息。例如每一個(gè)method的描述,包括method的參數(shù)及其型別,以及返回值得型別。
由于么metadata總是存在,所以工具軟件總是可以依賴他,例如visual studio.net便總是使用metadata向開(kāi)發(fā)人員展示,她剛剛敲進(jìn)去的那些class有哪些methods可用。
attributes(特性)
metadata還包括attributes(屬性),存儲(chǔ)metadata內(nèi)的值,可被讀取并可用于控制這些代碼運(yùn)行行為的方方面面。.net framework類庫(kù)在很多方面都依賴于它,包括制定事務(wù)需求,指定那些methods應(yīng)該開(kāi)放為soap-called web services,以及描述安全需求等等。
組織受控代碼:裝配件(assembly)
裝配件由一個(gè)或多個(gè)文件組成,這些文件構(gòu)成了一個(gè)邏輯單元。每一個(gè)裝配件都有一份清單,即裝配件的metadata:manifest。清單包含于裝配件的某個(gè)文件中,并且包含了裝配件的信息,以及“組成裝配件的文件”的信息。一個(gè)裝配件可以是由一個(gè)或者多個(gè)文件組成(dlls, exes, html等等), 代表一組資源, 以及類型的定義和實(shí)現(xiàn)的集合. 一個(gè)配件也可以包含對(duì)其它配件的引用. 所有這些資源、類型和引用都在一manifest中描述。這個(gè)manifest也是配件的一部分,所以配件是一個(gè)自我描述的,不需要其它附加的部件對(duì)其描述! 配件的另一個(gè)重要特性是,它是.net環(huán)境下類型標(biāo)識(shí)的一部分,也可以說(shuō)是基本單位。因?yàn)椋瑓^(qū)分一個(gè)類型的標(biāo)識(shí)就是包含這個(gè)類型的配件名字加上類型名本身。舉個(gè)例子,配件a定義了類型t, 配件b也定義了同名類型t,但是.net把這兩個(gè)類型認(rèn)為是不同的類型。配件也是.net框架用于安全策略的基本單位,許多安全策略都是基于配件的。
裝配件可以消除所謂的dll hell。所有的裝配件都有一個(gè)簡(jiǎn)單的文本名稱,但是也可以由一個(gè)“強(qiáng)名稱(strong name)”,強(qiáng)名稱將是獨(dú)一無(wú)二的,clr利用強(qiáng)名稱對(duì)裝配件進(jìn)行版本檢查,施加強(qiáng)制的版本管理,從而有效地消除所謂的dll hell。如果想將裝配件安裝到gac(globle assembly cache,全局裝配件緩存)中,就一定要有一個(gè)強(qiáng)名稱。
即時(shí)編譯(just-in-time compilation,jit)
開(kāi)發(fā)人員編寫(xiě)的受控代碼在被編譯成msil之后,在運(yùn)行時(shí)會(huì)被再編譯為原生代碼。有兩種方式可以完成這個(gè)目標(biāo),一種是在運(yùn)行期逐一編譯methods的msil代碼,另一種是在裝配件被運(yùn)行前整批的全部編譯為原生代碼。
將msil編譯為原生代碼的一個(gè)最常見(jiàn)的辦法,就是先讓clr裝在裝配件,然后在每個(gè)method第一次被調(diào)用時(shí)編譯之。由于每個(gè)method都只在第一次被調(diào)用時(shí)才被編譯,所以我們稱之為即時(shí)編譯(jit)。每一個(gè)methods在第一次調(diào)用被編譯之后便會(huì)被緩存起來(lái),這樣后面再次調(diào)用的時(shí)候便無(wú)須再編譯。
當(dāng)一個(gè)method被編譯時(shí),同時(shí)也被檢查型別安全,這個(gè)過(guò)程被稱為驗(yàn)證(verification),檢查范圍包括method的msil和metadata,以確保代碼沒(méi)有做非法訪問(wèn)。待會(huì)將要講到的“clr內(nèi)建安全功能”即依賴這個(gè)驗(yàn)證過(guò)程,它也被用于檢驗(yàn)受控代碼行為的其他方面。
代碼訪問(wèn)安全(code access security)
代碼安全問(wèn)題一直是一個(gè)令人頭痛的問(wèn)題,你不知道你安裝的軟件在你的電腦上做了些什么。尤其在internet無(wú)處不在的今天,更是可能給你帶來(lái)巨大的安全危機(jī)。必須要有一種辦法來(lái)限制代碼——尤其是下載而來(lái)的代碼——的活動(dòng)范圍。
“代碼訪問(wèn)安全”機(jī)制可限制運(yùn)行中的代碼的行動(dòng)范圍。目前,控制“下載代碼是否可運(yùn)行”的windows典型解決方案是:?jiǎn)栍脩簦?net代碼安全機(jī)制并不依賴用戶的知識(shí)。clr-based代碼究竟能做些什么,有賴兩種東西的交集:代碼要求的“權(quán)限”是什么?代碼運(yùn)行時(shí)安全策略實(shí)際上授予的“權(quán)限”又是什么?為了標(biāo)明它需要哪一種訪問(wèn)權(quán)限,裝配件可以精確的指明需要運(yùn)行環(huán)境給它什么樣的權(quán)限。代碼訪問(wèn)安全性使得clr可以根據(jù)裝配件名稱、發(fā)布商、從何而來(lái)等線索,限制特定裝配件的行為能力。這種機(jī)制非常具有彈性,提供很多選項(xiàng),可以滿足廣泛的要求。而且,在一個(gè)彌漫全球網(wǎng)絡(luò)和移動(dòng)代碼的世界里,題共一種強(qiáng)制手段來(lái)限制代碼的行為能力和范圍,實(shí)在是不可或缺。
角色安全性(role-based security)
clr提供的角色安全性解決了代碼訪問(wèn)安全性所不能解決的另一個(gè)問(wèn)題,那就是如何去限制某些用戶可以運(yùn)行某些代碼,而另一些用戶則不能運(yùn)行這些代碼。clr允許為每一個(gè)method添加屬性來(lái)指明允許運(yùn)行這段代碼的有哪些角色,之有用戶所扮演的角色與之相匹配時(shí),這段代碼在被允許運(yùn)行。
垃圾回收(garbage collection)
“垃圾回收”機(jī)制自動(dòng)釋放不再被使用的對(duì)像。對(duì)于每一個(gè)c++程序員來(lái)說(shuō),可能最頭痛的就是內(nèi)存泄露問(wèn)題了,可能c++程序員認(rèn)為,內(nèi)存太重要了,所以不能由系統(tǒng)來(lái)自動(dòng)管理。但在計(jì)算處理能力高速發(fā)展的今天,.net程序員認(rèn)為,如何處理業(yè)務(wù)邏輯,建立隨需應(yīng)變的系統(tǒng)才是最重要的,既然如此,又何必不把內(nèi)存交給系統(tǒng)來(lái)管理,自己好騰出精力來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯呢?
在.net framework應(yīng)用程序執(zhí)行過(guò)程中,managed heap起到了至關(guān)重要的作用。每一個(gè)reference type(例如每一個(gè)classes和每一個(gè)string)的實(shí)體都沒(méi)分配于heap之上。一旦應(yīng)用程序運(yùn)行起來(lái),heap內(nèi)存會(huì)被塞滿。為了創(chuàng)建新的實(shí)體,程序必須獲得更多可用空間。這件事的處理過(guò)程稱為“垃圾收集”。
垃圾回收器跟蹤并回收托管內(nèi)存中分配的對(duì)象,定期執(zhí)行垃圾回收以回收分配給沒(méi)有有效引用的對(duì)象的內(nèi)存。當(dāng)使用可用內(nèi)存不能滿足內(nèi)存請(qǐng)求時(shí),gc會(huì)自動(dòng)進(jìn)行。
在進(jìn)行垃圾回收時(shí),垃圾回收器回首先搜索內(nèi)存中的托管對(duì)象,然后從托管代碼中搜索被引用的對(duì)象并標(biāo)記為有效,接著釋放沒(méi)有被標(biāo)記為有效的對(duì)象并收回內(nèi)存,最后整理內(nèi)存將有效對(duì)象挪動(dòng)到一起。這就是gc的四個(gè)步驟。
由上可見(jiàn),gc是很影響性能的,所以一般說(shuō)來(lái)這種事情況還是盡量少發(fā)生為好。
為了減少一些性能影響,.net的gc支持對(duì)象老化,或者說(shuō)分代的概念,代是對(duì)象在內(nèi)存中相對(duì)存現(xiàn)時(shí)期的度量單位,對(duì)象的代數(shù)或存現(xiàn)時(shí)期說(shuō)明對(duì)象所屬的代。目前.net的垃圾回收器支持三代。每進(jìn)行一次gc,沒(méi)有被回收的對(duì)象就自動(dòng)提升一代。較近創(chuàng)建的對(duì)象屬于較新的代,比在應(yīng)用程序生命周期中較早創(chuàng)建的對(duì)象的代數(shù)低。最近代中的對(duì)象位于零代中。每一次gc的時(shí)候,都首先回收零代中的對(duì)象,只有在較低代數(shù)的對(duì)象回收完成后仍不能滿足需求的情況下才回收較高代數(shù)的對(duì)象。
應(yīng)用程序域(application domains)
應(yīng)用程序域又是一個(gè)新的概念。我們知道,進(jìn)程可以將“它所包含的應(yīng)用程序”和“其他所有應(yīng)用程序”隔離開(kāi)來(lái),從而使一個(gè)應(yīng)用程序的崩潰不會(huì)影響到其他的。但這會(huì)影響性能,也使得進(jìn)程間的通信變得很困難。
而應(yīng)用程序域給我們提供了另外一種解決問(wèn)題的辦法,一個(gè)進(jìn)程可以包含多個(gè)應(yīng)用程序域,每個(gè)應(yīng)用程序域內(nèi)的應(yīng)用程序彼此隔離,避免了“為每一個(gè)應(yīng)用程序啟動(dòng)一個(gè)新進(jìn)程”所帶來(lái)的開(kāi)銷,之間的通信卻又比進(jìn)程間通信有效率的多。appdomain提供了進(jìn)程的好處,而且沒(méi)有進(jìn)程帶來(lái)的大開(kāi)銷。
app domains提供了一個(gè)適應(yīng)于多種平臺(tái)的一致環(huán)境。.net framework意圖運(yùn)行于windows和其他可能的操作系統(tǒng)上,而不同的操作系統(tǒng)有完全不同的進(jìn)程模型(process models),尤其小型設(shè)備所使用的系統(tǒng)更是如此。讓app domains定義自己的進(jìn)程模型,有助于.net framework跨越所有平臺(tái),提供一個(gè)一致的環(huán)境。
六. .net語(yǔ)言
1. visual basic.net
在windows世界里,visual basic絕對(duì)是最流行的編程語(yǔ)言,visual basic.net為這個(gè)廣泛使用的工具帶來(lái)的翻天覆地的變化。vb.net建立于clr(通用語(yǔ)言運(yùn)行層)之上,因此這個(gè)語(yǔ)言的大部分成分已經(jīng)被clr有效界定了。實(shí)際上除了語(yǔ)法,你很難看得出如今的vb.net和當(dāng)年的vb有什么相似之處了。從大的方面來(lái)講,vb.net支持繼承、委托(delegates)等新的特性,從小的方面來(lái)講,vb.net數(shù)組的索引是從0開(kāi)始了!
2. c++.net
c++.net其實(shí)應(yīng)該說(shuō)叫做帶有受控?cái)U(kuò)充件(managed extensions)的c++。
c++是一門(mén)非常流行的語(yǔ)言,一門(mén)已被廣泛使用超過(guò)10年的語(yǔ)言。“提供某種方式使c++能夠和.net framework”是不可或缺的。然而同vb一樣,c++的語(yǔ)義同clr的語(yǔ)義并非嚴(yán)格匹配。更糟的是,微軟并不擁有c++,所以微軟并不能像對(duì)visual basic動(dòng)大手術(shù)那樣也對(duì)c++來(lái)個(gè)脫胎換骨的修改。如果單方面修改這個(gè)語(yǔ)言使其和clr相配,會(huì)遭到嚴(yán)重的抗議,但如果不提供“讓開(kāi)發(fā)人員得以運(yùn)用c++創(chuàng)建.net framework-based 應(yīng)用程序”的方法,也會(huì)讓很多開(kāi)發(fā)人員不痛快,至少,比爾蓋茨會(huì)很不痛快。
于是,微軟選擇開(kāi)發(fā)一個(gè)相對(duì)于基本c++語(yǔ)言而言的擴(kuò)充集。正式的名稱是managed extensions for c++。
新的c++定義了幾個(gè)新的關(guān)鍵字,他們均以兩個(gè)下劃線開(kāi)頭,其中最重要的有如下所示:
__gc:指出某個(gè)type受垃圾回收機(jī)制的管制,換句話說(shuō)這個(gè)關(guān)鍵字意味著他所聲明的types是個(gè)cts reference type。
__value:指出某個(gè)types不受垃圾回收機(jī)制的管制,換句話說(shuō)它所聲明的types是個(gè)cts value type。
__interface:用以定義一個(gè)cts interface type(接口型別)。
__box:將cts value type轉(zhuǎn)換為reference type。
__unbox:將裝箱的(boxed)cts value type轉(zhuǎn)回其原來(lái)形式。
__delegate:用以定義一個(gè)cts delegate type(代理型別)。
基于以上的改變,managed c++有了這么一些特性:
managed c++代碼和unmanaged c++代碼可共存于同一個(gè)進(jìn)程中。
managed c++允許完全訪問(wèn)clr特性。
c++是visual studio.net中唯一能直接編譯為原生代碼(native code)的語(yǔ)言。
c++語(yǔ)言不會(huì)壽終正寢,但它的作用將會(huì)收斂,可能還會(huì)收斂的相當(dāng)厲害,作為一種“開(kāi)發(fā)廣泛應(yīng)用程序的首選工具”的日子已經(jīng)終結(jié)。
3. c#
c#是一種有著和c語(yǔ)法相似的面向?qū)ο笳Z(yǔ)言
正如其名字所暗示的,c#是c語(yǔ)言家族中的一個(gè)新成員。c++從c衍化而來(lái),嚴(yán)格的說(shuō),c++由于帶著c的包袱從而并不是一個(gè)嚴(yán)格的面向?qū)ο蟮恼Z(yǔ)言。而c#不同,c#十足的面向?qū)ο螅膊⒉粠?lái)幾近殘酷的復(fù)雜度。對(duì)于擁有c++或者java背景的任何人來(lái)說(shuō),c#尤其平易近人。
c#和clr的標(biāo)準(zhǔn)化
微軟已經(jīng)將c#和cli(common language infrastucture,通用語(yǔ)言基礎(chǔ)設(shè)施,clr的一個(gè)子集)提交國(guó)際標(biāo)準(zhǔn)化團(tuán)體ecma,他們正朝著ecma標(biāo)準(zhǔn)之路邁進(jìn)。隨同c#一同被提交并期望獲得標(biāo)準(zhǔn)化的還有:metadata(元數(shù)據(jù))的語(yǔ)法和語(yǔ)義、msil(重命名后腳common intermediate language,cil,通用中介語(yǔ)言),以及一部分.net framework類庫(kù)。
sun曾經(jīng)對(duì)java做過(guò)類似的事情,但在最后一刻退縮了。sun拒絕邁出這一步是因?yàn)椴辉阜艞墝?duì)java的控制。從這一點(diǎn)上來(lái)說(shuō),c#的前景可能會(huì)值得期待一些。
interfaces(接口)
接口(interface)用來(lái)定義一種程序的協(xié)定。實(shí)現(xiàn)接口的類或者結(jié)構(gòu)要與接口的定義嚴(yán)格一致。有了這個(gè)協(xié)定,就可以拋開(kāi)編程語(yǔ)言的限制(理論上)。接口可以從多個(gè)基接口繼承,而類或結(jié)構(gòu)可以實(shí)現(xiàn)多個(gè)接口。接口可以包含方法、屬性、事件和索引器。接口本身不提供它所定義的成員的實(shí)現(xiàn)。接口只指定實(shí)現(xiàn)該接口的類或接口必須提供的成員。 
   接口好比一種模版,這種模版定義了對(duì)象必須實(shí)現(xiàn)的方法,其目的就是讓這些方法可以作為接口實(shí)例被引用。接口不能被實(shí)例化。類可以實(shí)現(xiàn)多個(gè)接口并且通過(guò)這些實(shí)現(xiàn)的接口被索引。接口變量只能索引實(shí)現(xiàn)該接口的類的實(shí)例。
屬性
屬性可以說(shuō)是c#語(yǔ)言的一個(gè)創(chuàng)新。當(dāng)然你也可以說(shuō)不是。不是的原因是它背后的實(shí)現(xiàn)實(shí)際上還是兩個(gè)函數(shù)--一個(gè)賦值函數(shù)(get),一個(gè)取值函數(shù)(set),這從它生成的中間語(yǔ)言代碼可以清晰地看到。是的原因是它的的確確在語(yǔ)言層面實(shí)現(xiàn)了面向?qū)ο缶幊桃恢币詠?lái)對(duì)“屬性”這一oo風(fēng)格的類的特殊接口的訴求。理解屬性的設(shè)計(jì)初衷是我們用好屬性這一工具的根本。c#不提倡將域的保護(hù)級(jí)別設(shè)為public而使用戶在類外任意操作--那樣太不oo,或者具體點(diǎn)說(shuō)太不安全!對(duì)所有有必要在類外可見(jiàn)的域,c#推薦采用屬性來(lái)表達(dá)。屬性不表示存儲(chǔ)位置,這是屬性和域的根本性的區(qū)別。
delegates(代理)、event(事件)
代理實(shí)現(xiàn)的是象c++等語(yǔ)言的指針功能,不同于函數(shù)指針,代理是一種面向?qū)ο蟆踩愋偷摹4硎屡缮诠不悾╯ystem)的一種參考類型,方法被壓入一個(gè)代理中,對(duì)于實(shí)例方法被稱為實(shí)例的組成實(shí)體或關(guān)于實(shí)例的方法,而靜態(tài)方法,被稱為類的組成實(shí)體或類方法。代理的強(qiáng)大功能是它可以自動(dòng)的匹配方法,而不管其類型。
基于其上的,c#還定義了一個(gè)完全oo的東西,event(事件),形象地說(shuō),事件是對(duì)象用來(lái)“發(fā)出通知”的成員。根據(jù)你的需要,你可以訂閱某一個(gè)對(duì)象中的事件并響應(yīng)該事件做出相應(yīng)的處理。
七. .net framework類庫(kù)(class library)
名字空間(namespace)
和com類庫(kù)的平面化結(jié)構(gòu)不同的是,.net 類庫(kù)被組織為一套具有層次結(jié)構(gòu)的名字空間。每個(gè)名字空間可以包含types如classes和interfaces,以及其他次級(jí)名字空間(sub-namespaces)。整個(gè)體系的root名為system,每一個(gè).net framework應(yīng)用程序都回用上system所含的一些types。其他名字空間所含的types也可能被許多開(kāi)發(fā)人員經(jīng)常使用。system是基礎(chǔ),但不是全部。
.net 類庫(kù)的結(jié)構(gòu)
 
八. 訪問(wèn)數(shù)據(jù):ado.net
與數(shù)據(jù)打交道,如搜索、更新和處理等,使軟件的基本任務(wù)。今天,大部分?jǐn)?shù)據(jù)通常被存儲(chǔ)于某種類型的數(shù)據(jù)庫(kù)管理系統(tǒng)中(dbms)中,通常是關(guān)系型數(shù)據(jù)庫(kù)(relational database)。開(kāi)發(fā)人員需要某些機(jī)制,允許他們的應(yīng)用程序訪問(wèn)這些信息。windows dna有一組名為activex數(shù)據(jù)對(duì)象(activex data objects,ado)的com classes,解決了這個(gè)問(wèn)題。net framework中的結(jié)局方案時(shí)ado的激進(jìn)更新版。
與 ado 的早期版本和其他數(shù)據(jù)訪問(wèn)組件相比,ado.net 提供了若干好處。這些好處分成以下幾個(gè)類別:
互操作性
ado.net 應(yīng)用程序可以利用 xml 的靈活性和廣泛接受性。由于 xml 是用于在網(wǎng)絡(luò)中傳輸數(shù)據(jù)集的格式,因此可以讀取 xml 格式的任何組件都可以處理數(shù)據(jù)。實(shí)際上,接收組件根本不必是 ado.net 組件:傳輸組件可以只是將數(shù)據(jù)集傳輸給其目標(biāo),而不考慮接收組件的實(shí)現(xiàn)方式。目標(biāo)組件可以是 visual studio 應(yīng)用程序或無(wú)論用什么工具實(shí)現(xiàn)的其他任何應(yīng)用程序。唯一的要求是接收組件能夠讀取 xml。作為一項(xiàng)工業(yè)標(biāo)準(zhǔn),xml 正是在謹(jǐn)記這種互操作性的情況下設(shè)計(jì)的。
可維護(hù)性
在已部署系統(tǒng)的生存期中,適度的更改是可能的,但由于十分困難,所以很少嘗試進(jìn)行實(shí)質(zhì)的結(jié)構(gòu)更改。這是很遺憾的,因?yàn)樵谑录淖匀贿^(guò)程中,這種實(shí)質(zhì)上的更改會(huì)變得很有必要。例如,當(dāng)已部署的應(yīng)用程序越來(lái)越受用戶歡迎時(shí),增加的性能負(fù)荷可能需要進(jìn)行結(jié)構(gòu)更改。隨著已部署的應(yīng)用程序服務(wù)器上的性能負(fù)荷的增長(zhǎng),系統(tǒng)資源會(huì)變得不足,并且響應(yīng)時(shí)間或吞吐量會(huì)受到影響。面對(duì)該問(wèn)題,軟件設(shè)計(jì)者可以選擇將服務(wù)器的業(yè)務(wù)邏輯處理和用戶界面處理劃分到單獨(dú)計(jì)算機(jī)上的單獨(dú)層上。實(shí)際上,應(yīng)用程序服務(wù)器層將替換為兩層,緩解了系統(tǒng)資源缺乏。
該問(wèn)題并不是要設(shè)計(jì)三層應(yīng)用程序。相反,它是要在應(yīng)用程序部署以后增加層數(shù)。如果原始應(yīng)用程序使用數(shù)據(jù)集以 ado.net 實(shí)現(xiàn),則該轉(zhuǎn)換很容易進(jìn)行。請(qǐng)記住,當(dāng)用兩層替換單個(gè)層時(shí),將安排這兩層交換信息。由于這些層可以通過(guò) xml 格式的數(shù)據(jù)集傳輸數(shù)據(jù),所以通訊相對(duì)較容易。
可編程性
visual studio 中的 ado.net 數(shù)據(jù)組件以不同方式封裝數(shù)據(jù)訪問(wèn)功能,幫助您加快編程速度并減少犯錯(cuò)幾率。例如,數(shù)據(jù)命令提取生成和執(zhí)行 sql 語(yǔ)句或存儲(chǔ)過(guò)程的任務(wù)。
強(qiáng)類型的數(shù)據(jù)集
由這些工具生成的 ado.net 數(shù)據(jù)類導(dǎo)致類型化數(shù)據(jù)集。這又使您可以通過(guò)已聲明類型的編程訪問(wèn)數(shù)據(jù)。最后,已聲明類型的數(shù)據(jù)集的代碼更安全,原因在于它提供對(duì)類型的編譯時(shí)檢查。例如,假定 availablecredit 表達(dá)為貨幣值。如果程序員誤向 availablecredit 分配了字符串值,則環(huán)境會(huì)在編譯時(shí)向程序員報(bào)告該錯(cuò)誤。當(dāng)使用未聲明類型的數(shù)據(jù)集時(shí),程序員直到運(yùn)行時(shí)才會(huì)知道該錯(cuò)誤。
對(duì)于不連接的應(yīng)用程序,ado.net 數(shù)據(jù)庫(kù)提供的性能優(yōu)于 ado 不連接的記錄集。當(dāng)使用 com 封送在層間傳輸不連接的記錄集時(shí),會(huì)因?qū)⒂涗浖瘍?nèi)的值轉(zhuǎn)換為 com 可識(shí)別的數(shù)據(jù)類型而導(dǎo)致顯著的處理開(kāi)銷。在 ado.net 中,這種數(shù)據(jù)類型轉(zhuǎn)換則沒(méi)有必要。 
可伸縮性
因?yàn)?web 可以極大增加對(duì)數(shù)據(jù)的需求,所以可縮放性變得很關(guān)鍵。internet 應(yīng)用程序具有無(wú)限的潛在用戶供應(yīng)。盡管應(yīng)用程序可以很好地為十幾個(gè)用戶服務(wù),但它可能不能向成百上千個(gè)(或幾百萬(wàn)個(gè))用戶提供同樣好的服務(wù)。使用數(shù)據(jù)庫(kù)鎖和數(shù)據(jù)庫(kù)連接之類資源的應(yīng)用程序不能很好地為大量用戶服務(wù),因?yàn)橛脩魧?duì)這些有限資源的需求最終將超出其供應(yīng)。 
ado.net 通過(guò)鼓勵(lì)程序員節(jié)省有限資源來(lái)實(shí)現(xiàn)可縮放性。由于所有 ado.net 應(yīng)用程序都使用對(duì)數(shù)據(jù)的不連接訪問(wèn),因此它不會(huì)在較長(zhǎng)持續(xù)時(shí)間內(nèi)保留數(shù)據(jù)庫(kù)鎖或活動(dòng)數(shù)據(jù)庫(kù)連接。 
下一代的sql server:yukon
yukon是預(yù)定2005年供貨的sql server的新一代版本。集成了.net framework 2.0。sql server "yukon"、.net 技術(shù)和 microsoft 開(kāi)發(fā)者工具之間更深入的整合將提高開(kāi)發(fā)人員產(chǎn)能和彈性,讓開(kāi)發(fā)人員得以:
建置并維護(hù)強(qiáng)固、安全、可擴(kuò)充的數(shù)據(jù)庫(kù)應(yīng)用程序。開(kāi)發(fā)人員將擁有一套適用于 transact-sql、xml 和 multidimensional expression (mdx) 的開(kāi)發(fā)工具。與 visual studio® 開(kāi)發(fā)環(huán)境的整合將提供更有效的實(shí)務(wù)和商業(yè)智能應(yīng)用程序開(kāi)發(fā)和偵錯(cuò)。sql server "yukon" 也將包含對(duì) transact-sql 語(yǔ)言的強(qiáng)大改進(jìn)。 
從更多的開(kāi)發(fā)彈性中獲益。借著內(nèi)嵌在數(shù)據(jù)庫(kù)引擎的 common language runtime (clr),開(kāi)發(fā)人員將可以從多樣化的熟悉語(yǔ)言中選擇,用來(lái)開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序,包括 transact-sql、microsoft visual basic® .net、microsoft visual c#® .net 和 microsoft visual j#™ .net。此外,clr 整合將透過(guò)使用者定義的型別和函式,為開(kāi)發(fā)人員提供更多的彈性。clr 也將提供機(jī)會(huì),讓使用協(xié)力廠商的程序代碼能夠快速開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序。 
跨任一種平臺(tái)、應(yīng)用程序或裝置以共享數(shù)據(jù)。對(duì)于諸如原生 xml 支持、使用者定義的數(shù)據(jù)型別和 xquery 的改進(jìn)將讓組織完美連接內(nèi)部和外部系統(tǒng)。sql server "yukon" 將提供關(guān)系型和 xml 數(shù)據(jù)的原生支持,讓企業(yè)得以最適合其需要的格式儲(chǔ)存、管理和分析數(shù)據(jù)。對(duì)于現(xiàn)有和新出的開(kāi)放標(biāo)準(zhǔn),如超文字傳輸協(xié)議 (http)、xml、簡(jiǎn)單對(duì)象存取協(xié)議 (soap)、xquery 和 xml 結(jié)構(gòu)描述定義 (xsd) 的支持,也將加速橫跨已擴(kuò)展之企業(yè)系統(tǒng)之間的通訊。 
九. 開(kāi)發(fā)windows相關(guān)應(yīng)用
有些時(shí)候,browser-based應(yīng)用程序似乎接管了這個(gè)世界。盡管開(kāi)發(fā)人員曾經(jīng)投入大量時(shí)間,徹底搞清楚windows gui是怎么回事,他們現(xiàn)在也為html和javascript細(xì)節(jié)留下了豆大的汗珠。對(duì)于現(xiàn)在軟件來(lái)說(shuō),瀏覽器已經(jīng)成了新的缺省界面。
但是windows guis依然不可小覷。瀏覽器雖然占據(jù)支配地位,但直接訪問(wèn)屏幕象素的應(yīng)用程序,并沒(méi)有消亡。.net framework設(shè)計(jì)者提供了一套嶄新的classes,是clr-based應(yīng)用程序能夠構(gòu)建windows guis。包含于system.windows.forms名字空間中的這套classes通常被稱為windows forms。
1. 本地應(yīng)用程序
典型的gui模型是一個(gè)form,帶有負(fù)責(zé)響應(yīng)事件的代碼。windows forms遵循這種傳統(tǒng)模型。每一個(gè)form都是form class的一個(gè)實(shí)體,而接受和派發(fā)事件的消息循環(huán),由application class提供。form class的每一個(gè)實(shí)體都有一大套properties,用來(lái)控制form在屏幕上顯示的外觀。forms通常包含其他class,統(tǒng)稱為windows forms控件(controls),他們一般用于展示某種輸出,接受用戶的某些輸入,抑或兼而有之。空間也擁有properties,yon與定制其外觀。forms和controls都可以相應(yīng)events,并做出某種動(dòng)作。
另一個(gè)相關(guān)的技術(shù)就是gdi+了
gdi+ 是 microsoft windows xp以及后續(xù)windows操作系統(tǒng)的子系統(tǒng),同時(shí)又是.net提供的一種新的簡(jiǎn)單、快速的圖形圖象開(kāi)發(fā)技術(shù)。顧名思義,gdi+ 是 gdi(windows 早期版本提供的圖形設(shè)備接口)的后續(xù)版本。gdi+ 是一種應(yīng)用程序編程接口 (api),通過(guò)一套部署為托管代碼的類來(lái)展現(xiàn)。這套類被稱為 gdi+ 的“托管類接口”。 
程序員可利用gdi+這樣的圖形設(shè)備接口在屏幕或打印機(jī)上顯示信息,而不需要考慮特定顯示設(shè)備的具體情況。應(yīng)用程序的程序員調(diào)用gdi+類提供的方法,而這些方法又反過(guò)來(lái)調(diào)用特定的設(shè)備驅(qū)動(dòng)程序。gdi+ 將應(yīng)用程序與圖形硬件隔離,而正是這種隔離允許開(kāi)發(fā)人員創(chuàng)建設(shè)備無(wú)關(guān)的應(yīng)用程序。
2. 智能客戶端技術(shù)
smart client是什么
簡(jiǎn)而言之,smart client智能客戶端就是這樣一種一個(gè)可擴(kuò)展的能集成不同應(yīng)用的桌面應(yīng)用程序:它可以無(wú)接觸部署、即需即裝、動(dòng)態(tài)加載,xcopy即可運(yùn)行而無(wú)須修改注冊(cè)表,可以動(dòng)態(tài)升級(jí)、自動(dòng)更新,可以方便的經(jīng)web運(yùn)行而不用擔(dān)心防火墻問(wèn)題并可以方便的離線運(yùn)用,方便的連接webservices的windows應(yīng)用程序。
smart client的特點(diǎn)
動(dòng)態(tài)加載,即需即裝
應(yīng)用程序的各個(gè)構(gòu)件之間的相互調(diào)用并不采用直接引用的方式,而是采用動(dòng)態(tài)加載,即需即裝的方式,有效地降低了對(duì)系統(tǒng)資源的消耗。應(yīng)用軟件開(kāi)發(fā)商可根據(jù)企業(yè)應(yīng)用系統(tǒng)的公共接口進(jìn)行開(kāi)發(fā),然后將應(yīng)用組件發(fā)布在企業(yè)的服務(wù)器上,客戶端應(yīng)用程序?qū)⒆詣?dòng)發(fā)現(xiàn)并加載該應(yīng)用組件。
更松散的耦合
由于上面第一點(diǎn)所言構(gòu)件之間的相互調(diào)用并不采用直接引用方式,這樣系統(tǒng)實(shí)現(xiàn)的更松散的耦合,為應(yīng)用程序升級(jí)更新提供了方便。
進(jìn)一步的模塊化
由于應(yīng)用程序的松散耦合特性,使得系統(tǒng)的進(jìn)一步模塊化成為了可能,新功能、新特性的加入只需要開(kāi)發(fā)出符合接口定義的新模塊并添加連接即可。而無(wú)須修改重編譯現(xiàn)有的程序。
零接觸部署
安裝時(shí)只要將一個(gè)主程序文件下載到本地,直接運(yùn)行即可,無(wú)須改變注冊(cè)表或共享的系統(tǒng)組件,其他應(yīng)用組件將在第一次運(yùn)行時(shí)自動(dòng)下載。
網(wǎng)絡(luò)加載應(yīng)用程序組件
smart client的應(yīng)用程序可以很方便的從網(wǎng)絡(luò)服務(wù)器加載應(yīng)用程序,而且因?yàn)槌绦蚣凹虞d是從80端口實(shí)現(xiàn),故無(wú)須考慮防火墻問(wèn)題,這樣為企業(yè)系統(tǒng)的集中管理提供了方便。
自動(dòng)更新
只需將新版本的程序發(fā)布在服務(wù)器上,由客戶端自動(dòng)發(fā)現(xiàn)最新版本的程序和應(yīng)用組件,并自動(dòng)下載和更新。
在線與離線均可使用的應(yīng)用程序
smart client應(yīng)用程序盡管使用網(wǎng)絡(luò)加載程序集,但一旦加載之后,程序集便被緩存到了本地。當(dāng)用戶至少啟動(dòng)了一次應(yīng)用程序后,其裝配就被下載和緩存到本地內(nèi)存中了,所以用戶就可以離線運(yùn)行你的智能客戶端了(通過(guò)轉(zhuǎn)換瀏覽器到離線工作狀態(tài)),假設(shè)應(yīng)用程序不需要永久訪問(wèn)web services或一個(gè)共享的數(shù)據(jù)庫(kù)就可以運(yùn)行。
構(gòu)建智能客戶端的最大的好處就是可以離線使用。盡管業(yè)務(wù)之間的聯(lián)系越來(lái)越緊密,但我們?nèi)圆荒芙o企業(yè)應(yīng)用程序提供始終連續(xù)的連接。離線式工作方式可以在你重新在線時(shí),自動(dòng)接收數(shù)據(jù)和應(yīng)用程序更新,這種特征是人們很想得到的,但在.net前,這是很難實(shí)現(xiàn)的。同胖客戶端一樣,智能客戶端給客戶端分布大量的處理,這就為服務(wù)器免除了它在一個(gè)基于web的應(yīng)用程序中需要承擔(dān)的負(fù)荷。最后,智能客戶端采取一種用戶希望應(yīng)用程序采取的工作方式——允許快速數(shù)據(jù)存取和管理,而不需要不必要的屏幕更新。
個(gè)性化用戶界面
用戶可根據(jù)喜好自行設(shè)置客戶端應(yīng)用程序,配置信息將被保存到服務(wù)器上。
與webservices的完美集成
smart client應(yīng)用程序可以與webservices方便的集成應(yīng)用,這樣便可以輕松享受c/s應(yīng)用程序的完美用戶體驗(yàn)而不需擔(dān)心防火墻等等的一系列問(wèn)題。
smart client的優(yōu)勢(shì)
盡管有大量的廣告,但瘦web解決方案并沒(méi)必要成為所有企業(yè)應(yīng)用程序的未來(lái)。不要丟棄用winforms來(lái)構(gòu)建企業(yè)應(yīng)用程序這種想法,因?yàn)槠髽I(yè)應(yīng)用需要集中的分布。下面的這張表格描述了smart client和其他解決方案之間的對(duì)比:
表 1 比較幾者 
通過(guò)將智能客戶端的功能和web應(yīng)用程序的功能進(jìn)行比較,可以簡(jiǎn)化你的決策過(guò)程。 
smart client的工作模型
圖1. 智能客戶端的工作模型
應(yīng)用程序加載器用http從web服務(wù)器上的一個(gè)虛擬目錄來(lái)訪問(wèn)和下載裝配。下載后,裝配被緩存起來(lái),只有需要的時(shí)候才執(zhí)行它們。 
3. windows的未來(lái):longhorn
2003年5月,微軟公司在新奧爾良windows硬件開(kāi)發(fā)人員論會(huì)上(winhec),進(jìn)行了windows下一操作系統(tǒng) longhorn的內(nèi)部首映。微軟公司在論會(huì)上介紹了longhorn操作系統(tǒng)的發(fā)展計(jì)劃,并且認(rèn)為longhorn是windows 95操作系統(tǒng)以來(lái),繼windows xp操作系統(tǒng)之后,功能最強(qiáng)大,性能最突出的桌面操作系統(tǒng)。
longhorn的關(guān)鍵技術(shù):
應(yīng)用程序編程模型“winfx”。對(duì)“.net framework”的編程模型的擴(kuò)展,微軟表示:“將大幅提高開(kāi)發(fā)人員的開(kāi)發(fā)效率和應(yīng)用程序的安全性”。你甚至可以認(rèn)為,.net framework將更名為winfx,成為longhorn主要api。
圖形技術(shù)“avalon”。是用戶界面、文檔和用于顯示多媒體的綜合架構(gòu)。
存儲(chǔ)技術(shù)“winfs”。將強(qiáng)化檢索、關(guān)聯(lián)和使用信息的手段。根據(jù)特定需求而采用相應(yīng)的應(yīng)用程序數(shù)據(jù)結(jié)構(gòu)。
通信技術(shù)“indigo”。對(duì)web服務(wù)提供支援,能夠交換高安全性的信息,并能進(jìn)行互連。
十. 開(kāi)發(fā)web相關(guān)應(yīng)用
經(jīng)由web來(lái)訪問(wèn)軟件已經(jīng)是一件稀松平常的事情了。大多數(shù)新式企業(yè)應(yīng)用程序至少提供瀏覽器界面的選項(xiàng),甚至只提供瀏覽器界面。鑒于此,如果一個(gè)應(yīng)用平臺(tái)沒(méi)有為構(gòu)建web-based的軟件提供一級(jí)支持,那簡(jiǎn)直注定要失敗。事實(shí)上,通過(guò)web使用軟件的方式也在不斷變化之中,通過(guò)瀏覽器來(lái)和用戶交流當(dāng)然重要,但web services也閃亮登場(chǎng)了。web已經(jīng)從單純的眼球驅(qū)動(dòng)的世界,擴(kuò)張到也由應(yīng)用程序驅(qū)動(dòng)的世界。
asp.net是.net framework用于構(gòu)建web相關(guān)應(yīng)用的首要基礎(chǔ)。作為.net framework類庫(kù)的一個(gè)組成,它同時(shí)支持創(chuàng)建“瀏覽器應(yīng)用”和“web services應(yīng)用”,兩者都依賴共通的基礎(chǔ)設(shè)施。
1. 瀏覽器應(yīng)用程序
從前的asp:意大利面條
asp.net的新性能:
代碼分離
這個(gè)功能又叫做代碼隱藏(code-behind),將代碼放在單獨(dú)的文件中,你將不會(huì)再看到意大利面條似的代碼了。
(類似)事件驅(qū)動(dòng)模型
asp.net實(shí)現(xiàn)了類似事件驅(qū)動(dòng)模型這樣的機(jī)制,但由于http是一個(gè)無(wú)狀態(tài)的協(xié)議,還只能稱之為“類似”。
web controls 
web controls使創(chuàng)建forms 和html controls.的工作將會(huì)變得簡(jiǎn)單易行。例如,在asp中典型的選擇框/ select box里,你不得不創(chuàng)建一個(gè)循環(huán)以便讓控制系統(tǒng)裝入數(shù)據(jù)。但在asp.net里,你將會(huì)擁有一個(gè)"data-bound",這意味著它會(huì)與數(shù)據(jù)源連接,并會(huì)自動(dòng)裝入數(shù)據(jù)。
語(yǔ)言支持
asp.net支持多種語(yǔ)言,它的缺省語(yǔ)言將是:visual basic而不是vbscript,這意味著我們可以擺脫vbscript的語(yǔ)言限制,我們的代碼將是編譯后運(yùn)行的(而不是原來(lái)的解釋執(zhí)行)。
更好的代碼控制
對(duì)于com對(duì)象不再需要再在服務(wù)器上注冊(cè)的這個(gè)功能我們是非常喜愛(ài)的。但是通過(guò)這種過(guò)程簡(jiǎn)化,你再也不能夠在你的服務(wù)器上運(yùn)行 另外一個(gè)dll版本,并且代碼相當(dāng)保密,這意味著,如果沒(méi)有正確的開(kāi)發(fā)工具和源代碼,很難改變代碼。
更好的升級(jí)能力
此系統(tǒng)建成,本身有著一定的特性,以改進(jìn)多處理器和串環(huán)境中的性能。例如,session state 能夠通過(guò)單獨(dú)的處理器來(lái)維持,在一個(gè)單獨(dú)的機(jī)器上,甚至在數(shù)據(jù)庫(kù)中允許交叉的服務(wù)器會(huì)話。
2. web services應(yīng)用
asp.net中的web serivces應(yīng)用程序依賴.asmx網(wǎng)頁(yè)
就像迄今所描述的瀏覽器應(yīng)用程序一樣,服務(wù)器端的asp.net web services應(yīng)用程序也依賴網(wǎng)頁(yè)。這些網(wǎng)頁(yè)所在的文件都有一個(gè).asmx擴(kuò)展名,其內(nèi)不含任何的html,只是一些代碼。這是因?yàn)榉?wù)器僅僅是被軟件訪問(wèn),而非被人訪問(wèn),所以無(wú)需html,換句話說(shuō),服務(wù)器并不展示用戶界面。
web method attribute用以將method開(kāi)放為web services
為了將一個(gè)包含于.asmx文件內(nèi)的method開(kāi)放為一個(gè)web service,你唯一要做的事情就是在method的聲明方面插入web method attribute,這樣就可以了。一旦文件被建議,這個(gè)attribute將被存儲(chǔ)在“為此而產(chǎn)生之裝配件”的metadata中,就像所有其他特性一樣。他向asp.net技術(shù)設(shè)施提供了一個(gè)信號(hào):這個(gè)method應(yīng)該可以被web service訪問(wèn)。
web service客戶端依賴proxies(代理)
客戶端為了使用web services,開(kāi)發(fā)人員必須首先創(chuàng)建一個(gè)開(kāi)放了相同method的proxy class。利用這個(gè)代理類的信息,客戶端就知道該如何去調(diào)用并享受服務(wù)。
.net remoting
.net remoting 不屬于asp.net的技術(shù)范疇,但提供了與web services相似的功能。
.net remoting與web services的比較:
都是采用了soap協(xié)議
.net remoting僅限用于通信雙方都是.net平臺(tái)的情況下,而web services致力于提供一個(gè)不同平臺(tái)下應(yīng)用軟件不同的能力。
在通信雙方都是.net平臺(tái)的前提下,.net remoting提供了更高的性能。
十一. 基于smart device的開(kāi)發(fā)
何為smart device
smart device的中文意思就是“智能設(shè)備”,泛指smart phone、pocket pc等使用了windows ce操作系統(tǒng)的移動(dòng)的、嵌入式的或者具有人機(jī)交互功能的電子產(chǎn)品。pocket pc(以下簡(jiǎn)稱ppc)想必大家已經(jīng)都很熟悉了,現(xiàn)在國(guó)內(nèi)已經(jīng)有相當(dāng)?shù)挠脩羧后w。國(guó)際大廠如卡西歐、康柏等的產(chǎn)品早已進(jìn)入中國(guó)市場(chǎng),國(guó)內(nèi)公司如聯(lián)想也積極推出類似產(chǎn)品,爭(zhēng)奪這片未來(lái)很有潛力的市場(chǎng)。
何為.net compact framework
微軟為了實(shí)施.net戰(zhàn)略,在一年前推出了面向windows平臺(tái)的.net framework 1.0,我想這一點(diǎn)大家已經(jīng)很熟悉了。在2003年4月份,微軟又推出了windows server 2003和visual studio .net 2003。其中windows server 2003中更是集成了.net framework 1.1,而vs.net 2003中也增加了不少新鮮的開(kāi)發(fā)模版。
.net compact framework的中文名稱就是.net framework精簡(jiǎn)版。簡(jiǎn)單來(lái)說(shuō)如果windows ce操作系統(tǒng)是嵌入式或移動(dòng)電子設(shè)備上的windows,那么.net compact framework就是這些設(shè)備上的.net framework。實(shí)際上.net compact framework是.net framework針對(duì)嵌入式或移動(dòng)電子設(shè)備的子集和補(bǔ)充。.net compact framework有兩個(gè)主要組件:公共語(yǔ)言運(yùn)行庫(kù)和 .net compact framework類庫(kù)。
公共語(yǔ)言運(yùn)行庫(kù)
公共語(yǔ)言運(yùn)行庫(kù)提供了管理 .net compact framework代碼的執(zhí)行環(huán)境。代碼管理的形式可以是內(nèi)存管理、線程管理、安全性管理、代碼驗(yàn)證和編譯以及其他系統(tǒng)服務(wù)。
運(yùn)行時(shí)是為了增強(qiáng)性能而設(shè)計(jì)的。它使用實(shí)時(shí) (jit) 編譯的方法,使托管代碼能夠以運(yùn)行應(yīng)用程序的平臺(tái)的本機(jī)語(yǔ)言運(yùn)行。這樣,您就可以創(chuàng)建適用于多種平臺(tái)的應(yīng)用程序,而不用再擔(dān)心如何分別為每個(gè)平臺(tái)重新編譯或重新生成可執(zhí)行程序了。
即使您的移動(dòng)應(yīng)用程序與托管代碼一樣都是用 visual basic .net 或 c# .net 編寫(xiě)的,仍然可以集成存儲(chǔ)在動(dòng)態(tài)鏈接庫(kù)(dll,包括 windows ce api)外部的功能和子例程。.net compact framework提供的數(shù)據(jù)類型以及對(duì)結(jié)構(gòu)的支持使您能夠輕松地將 windows ce api 的功能集成到您的應(yīng)用程序中。
.net compact framework類庫(kù)
.net compact framework類庫(kù)是與公共語(yǔ)言運(yùn)行庫(kù)緊密集成的可重復(fù)使用類的集合。您的應(yīng)用程序?qū)⒗眠@些庫(kù)來(lái)派生出所需的功能。就像其他面向?qū)ο蟮念悗?kù)一樣,.net compact framework類型可用于完成許多常見(jiàn)的編程任務(wù),包括界面設(shè)計(jì)、利用 xml、數(shù)據(jù)庫(kù)訪問(wèn)、線程管理和文件輸入/輸出等。
.net compact framework 是.net framework完全版的一個(gè)兼容子集
由于.net compact framework是.net framework完整版的一個(gè)兼容子集,這就意味著,您可以使用您熟悉的vb.net或者c#方便地為pocket pc開(kāi)發(fā)應(yīng)用程序,并且您不需要考慮該ppc的處理器是arm、mips還是其他的什么處理器,更妙的是,這應(yīng)用程序在您的臺(tái)式機(jī)上一樣能很好的正常工作!
十二. office的擴(kuò)展應(yīng)用
將 office 用作業(yè)務(wù)解決方案平臺(tái)
開(kāi)發(fā)人員可以將 microsoft office 2003 應(yīng)用程序用作創(chuàng)建自定義解決方案的平臺(tái)。office 使開(kāi)發(fā)人員可以利用一套豐富的預(yù)置功能。
將 microsoft office word 2003 或 microsoft office excel 2003 用作解決方案前端使開(kāi)發(fā)人員可以利用熟悉的用戶界面和強(qiáng)大的工具,例如拼寫(xiě)檢查、多語(yǔ)言支持、更改跟蹤和數(shù)據(jù)透視表。另一個(gè)優(yōu)點(diǎn)是脫機(jī)使用解決方案的客戶端部分,這與使用基于 web 的結(jié)構(gòu)相比,更容易實(shí)現(xiàn)復(fù)雜的解決方案。
用于 microsoft office 系統(tǒng)的 visual studio 工具
用于 microsoft office 系統(tǒng)的 microsoft visual studio 工具可以幫助您創(chuàng)建解決方案,方法是使用 visual basic .net 和 visual c# 擴(kuò)展 word 2003 文檔和 excel 2003 工作簿。用于 office 的 visual studio 工具中包括新的 visual studio .net 項(xiàng)目,用于創(chuàng)建 word 文檔、word 模板和 excel 工作簿的后端代碼。這些項(xiàng)目包含:
對(duì)項(xiàng)目主要的主互操作程序集的引用 
對(duì)所需系統(tǒng)組件的引用 
項(xiàng)目初始化 
使開(kāi)發(fā)人員可以快速入門(mén)的安全設(shè)置 
用于 microsoft office 系統(tǒng)的 visual studio 工具可以幫助您快速創(chuàng)建解決方案,它利用了每個(gè)應(yīng)用程序的內(nèi)置功能并提供以下優(yōu)點(diǎn): 
word 和 excel 的后端托管代碼
用于 office 的 visual studio 工具中包括 visual studio .net 項(xiàng)目,以幫助您在 visual studio .net 環(huán)境中用 visual basic 和 c# 編寫(xiě) word 和 excel 的后端托管代碼。您的代碼對(duì)文檔或工作簿中發(fā)生的事件進(jìn)行響應(yīng)。有關(guān)更多信息,請(qǐng)參見(jiàn)使用托管代碼擴(kuò)展的 office 解決方案的結(jié)構(gòu)。 
部署和維護(hù)
在部署使用托管代碼擴(kuò)展的 office 解決方案時(shí),可以將編譯代碼和文檔存儲(chǔ)在共享位置以便于維護(hù);也可以將程序集和文檔的副本分發(fā)給每個(gè)用戶以適應(yīng)移動(dòng)工作方式。
安全
使用由 microsoft .net framework 提供的安全功能實(shí)現(xiàn)安全。對(duì)于使用用于 microsoft office 系統(tǒng)的 visual studio 工具創(chuàng)建的程序集,默認(rèn)策略是不允許任何程序集運(yùn)行,這有助于保護(hù)用戶不受病毒和其他惡意代碼的攻擊。在最終用戶可以利用文檔的托管代碼擴(kuò)展之前,管理員必須顯式對(duì)程序集授予完全信任。
脫機(jī)訪問(wèn)
如果將程序集部署到可以用 web 地址(http:// 或 https://)訪問(wèn)的網(wǎng)絡(luò)位置,可以使用 internet explorer 功能將該程序集緩存到本地計(jì)算機(jī)上。這使本地文檔可以在未連接到網(wǎng)絡(luò)時(shí)使用該程序集。如果將文檔和程序集的本地副本同時(shí)部署到每個(gè)用戶,就無(wú)須考慮網(wǎng)絡(luò)連接問(wèn)題了。
解決方案的典型結(jié)構(gòu)
下面的關(guān)系圖闡釋了一個(gè)典型的解決方案結(jié)構(gòu)。該關(guān)系圖的上部顯示從最終用戶角度出發(fā)的運(yùn)行時(shí)體驗(yàn)。 
運(yùn)行時(shí)涉及最終用戶的步驟: 
1.最終用戶打開(kāi)具有托管代碼擴(kuò)展(指向托管代碼程序集的自定義屬性)的文檔或工作簿。 
2.文檔或工作簿從共享網(wǎng)絡(luò)位置下載編譯后的程序集。 
3.程序集響應(yīng)文檔或工作簿中的事件。 
該關(guān)系圖的下部是從開(kāi)發(fā)人員和(可選)設(shè)計(jì)人員角度出發(fā)的設(shè)計(jì)時(shí)體驗(yàn)。 
設(shè)計(jì)時(shí)涉及開(kāi)發(fā)人員和設(shè)計(jì)人員的步驟: 
1.開(kāi)發(fā)人員在 visual studio .net 中創(chuàng)建 microsoft office 2003 項(xiàng)目。該項(xiàng)目包括文檔和在該文檔后端運(yùn)行的程序集。該文檔可以是已存在的文檔(多半是由設(shè)計(jì)人員創(chuàng)建的),或者也可以隨項(xiàng)目創(chuàng)建一個(gè)新文檔。 
2.設(shè)計(jì)人員(創(chuàng)建該項(xiàng)目的開(kāi)發(fā)人員或其他人)為最終用戶創(chuàng)建該文檔的最后外觀。
由于開(kāi)發(fā)人員主要在 visual studio .net 中工作,最終用戶主要在 microsoft office 2003 中工作,因此可以用兩種方式理解使用托管代碼擴(kuò)展的 office 解決方案。
開(kāi)發(fā)人員的角度
 最終用戶的角度
 
開(kāi)發(fā)人員使用 visual studio .net 編寫(xiě) word 和 excel 可以訪問(wèn)的代碼。 
盡管開(kāi)發(fā)人員似乎在創(chuàng)建一個(gè)運(yùn)行 word 或 excel 的可執(zhí)行文件,但實(shí)際的工作方式卻不是這樣的。文檔與一個(gè)程序集相關(guān)聯(lián),并包含指向該程序集的指針。打開(kāi)文檔時(shí),word 或 excel 定位該程序集并針對(duì)所有已處理的事件運(yùn)行代碼。
 使用解決方案的人只須同打開(kāi)任何其他 office 文件一樣打開(kāi)文檔或工作簿(或從模板創(chuàng)建新文檔)。 
程序集在文檔或工作簿中提供自定義功能,例如用當(dāng)前數(shù)據(jù)自動(dòng)填充它,或顯示對(duì)話框以請(qǐng)求輸入信息。該代碼執(zhí)行這些動(dòng)作時(shí),用戶并不知道此文檔與其他任何 office 文檔有何不同。
 
 
十三. .net my services
基于xml web service的下一代計(jì)算模式已經(jīng)為業(yè)界認(rèn)同,作為產(chǎn)品線較長(zhǎng)的軟件廠商,microsoft已經(jīng)在通向下一代的道路上領(lǐng)先了。繼推出了xml web service的各種相關(guān)產(chǎn)品之后,microsoft最近又發(fā)布了自己的基于xml web service的平臺(tái),這就是microsoft my services。在過(guò)去很長(zhǎng)一段時(shí)間里,my services曾以其開(kāi)發(fā)代碼hailstorm為人所關(guān)注。
信息溝通的挑戰(zhàn) 
雖然在過(guò)去的25年里,信息技術(shù)的非凡價(jià)值已經(jīng)得到了用戶的普遍認(rèn)同,但至今仍遠(yuǎn)沒(méi)有發(fā)展成熟,在很多方面有待加強(qiáng)和提高。各種設(shè)備和應(yīng)用程序各自為政,并不考慮與周圍世界的聯(lián)系。 
由此造成的后果是,每一種設(shè)備、每一種應(yīng)用程序乃至每一個(gè)web站點(diǎn)都有自己的一套規(guī)則和使用方法,造成用戶的困惑。例如,我們向pc中輸入朋友的電話號(hào)碼需要按照一定順序敲擊鍵盤(pán),而向palm pilot、pocket pc或者移動(dòng)電話中輸入同樣的電話號(hào)碼所需的方法則完全不同。因此,我們不得不從最基本的字符輸入法開(kāi)始,學(xué)習(xí)使用每一種設(shè)備。 
雖然我們?yōu)樾畔⒒倪M(jìn)步而驕傲,但我們并沒(méi)有真正掌握身邊的信息和設(shè)備,不難發(fā)現(xiàn),我們的重要信息散落在技術(shù)空間的成百上千個(gè)角落里: 在某個(gè)pc的應(yīng)用程序里、單位的某個(gè)服務(wù)器里、cookie里以及網(wǎng)站的用戶跟蹤表格里……移動(dòng)電話中存儲(chǔ)的電話號(hào)碼并不為電子郵件程序所知,因?yàn)檫@2種技術(shù)無(wú)法了解對(duì)方的語(yǔ)言。 
如果您搬家,改變了住址,您往往不得不在每一個(gè)web站點(diǎn)中更新您的送貨地址,如果萬(wàn)一某次疏忽了,“方便的”internet會(huì)帶給您一次不大不小的教訓(xùn)。您可能并不能擁有您的個(gè)人信息,它經(jīng)常會(huì)被遺忘在某個(gè)internet孤島上。各種應(yīng)用、web站點(diǎn)以及服務(wù)的孤立特性使得各種技術(shù)很難有效地協(xié)同工作。如果您在網(wǎng)上訂了機(jī)票,因?yàn)槿狈τ行У臏贤ǚ绞剑瑆eb站點(diǎn)很難將您的行程自動(dòng)同步到日程安排應(yīng)用程序里,即使實(shí)現(xiàn)了,通訊的雙方也不能保證客戶是同一個(gè)人。 
也許我們不得不承認(rèn),現(xiàn)在,我們實(shí)際上是在被動(dòng)地去適應(yīng)信息技術(shù),在享受新技術(shù)的成果之前,我們首先要適應(yīng)被強(qiáng)加的新規(guī)則。這種不便事實(shí)上限制了更有創(chuàng)造性的新技術(shù)和新產(chǎn)品的發(fā)展和應(yīng)用。 
初識(shí).net my services 
按照microsoft的定義,.net my services是一套以用戶為中心的軟件服務(wù)結(jié)構(gòu)框架,是若干各種用途的xml web services的集合。microsoft .net my services能夠簡(jiǎn)化將現(xiàn)有的各種孤立應(yīng)用集成的工作。最大的變化在于,.net my services是面向用戶的,而不是面向特定設(shè)備或應(yīng)用的。它使用戶能夠真正控制自己的信息、保護(hù)私人數(shù)據(jù),使得個(gè)性化服務(wù)更易實(shí)現(xiàn)。得益于microsoft .net技術(shù),.net my services能夠使各種設(shè)備、應(yīng)用和服務(wù)有效地協(xié)同工作,而用戶可以控制誰(shuí)可以訪問(wèn)自己的信息,具有哪種層次的訪問(wèn)權(quán)限,以及有效期限等。 
面向用戶,或者說(shuō)以用戶為中心實(shí)際上是以用戶數(shù)據(jù)為中心。因此,.net my services對(duì)用戶數(shù)據(jù)的安全非常重視,通過(guò)microsoft .net passport來(lái)保證數(shù)據(jù)的安全、完整和私密性。在任何應(yīng)用需要訪問(wèn)用戶數(shù)據(jù)時(shí),都需要用戶進(jìn)行確認(rèn)。 
以訂機(jī)票為例,通過(guò).net my services,在線旅行票務(wù)預(yù)訂服務(wù)可以自動(dòng)訪問(wèn)用戶的個(gè)人意向信息和付款服務(wù)(經(jīng)過(guò)用戶的確認(rèn)),如果用戶是進(jìn)行商務(wù)旅行,則在線旅行票務(wù)預(yù)訂服務(wù)還要經(jīng)過(guò).net my services的個(gè)體群屬關(guān)系服務(wù)確定用戶在公司的位置、從屬關(guān)系,并根據(jù)公司的商務(wù)旅行政策進(jìn)行匹配,使得航班級(jí)別與日程安排能夠符合公司的有關(guān)規(guī)定。一旦選定了航班,旅行服務(wù)還能自動(dòng)選擇相應(yīng)的日程安排服務(wù),自動(dòng)更新路線信息,并在航班延誤時(shí)進(jìn)行通知。通過(guò).net my services,您還可以共享出日程安排,使接待方隨時(shí)了解您的動(dòng)向。而您的日程安排信息可以通過(guò)您的pc、其他人的pc、某臺(tái)智能電話、pda以及任何智能信息設(shè)備來(lái)訪問(wèn)。 
.net my services工作原理
.net my services實(shí)際上由3部分組成,即身份認(rèn)證(.net passport)、消息傳遞(soap)以及數(shù)據(jù)描述(xml)。圖2顯示了應(yīng)用程序使用.net my services訪問(wèn)用戶數(shù)據(jù)的過(guò)程。 
.net passport 
.net passport是使用kerberos協(xié)議來(lái)完成身份認(rèn)證的,windows 2000和windows xp都使用了kerberos協(xié)議。簡(jiǎn)單地說(shuō),kerberos通過(guò)集中存儲(chǔ)的安全信息和分布式的“tickets”來(lái)實(shí)現(xiàn)用戶身份認(rèn)證。具體而言,.net my services通過(guò)如下步驟實(shí)現(xiàn)用戶身份驗(yàn)證。 
用戶開(kāi)啟客戶端應(yīng)用程序或?yàn)g覽器,打開(kāi)登錄界面,并輸入用戶名和口令。 
登錄動(dòng)作引發(fā)客戶端應(yīng)用程序或網(wǎng)站向.net passport請(qǐng)求一個(gè)登錄確認(rèn)證明(即“ticket-granting-ticket”,tgt)。 
.net passport驗(yàn)證用戶口令,頒發(fā)tgt,確認(rèn)登錄已經(jīng)成功。在滿足一定安全約束條款的前提下,該tgt在一定時(shí)期內(nèi)被緩存。 
客戶端應(yīng)用程序或網(wǎng)站向.net passport(它這時(shí)所扮演的角色是kerberos中的“證明頒發(fā)服務(wù)器”)提交tgt,同時(shí)請(qǐng)求頒發(fā)一個(gè)“會(huì)話證明” (即session ticket)。 
.net passport使用tgt來(lái)驗(yàn)證客戶端的身份是否正確(即是否有效),確認(rèn)后向相應(yīng)的web service頒發(fā)會(huì)話證明。 
客戶端向所請(qǐng)求的web service提交會(huì)話證明,經(jīng)確認(rèn)后,客戶端與web service的信息交換展開(kāi),所有數(shù)據(jù)都經(jīng)由該會(huì)話證明加密從而確保安全。 
soap 
soap是基于xml的協(xié)議,一條soap消息由3部分組成。首先是信封(envelope),用來(lái)描述消息的結(jié)構(gòu)、內(nèi)容以及處理方法。其次是一套規(guī)則,描述處理不同類型數(shù)據(jù)的方法。最后是關(guān)于原過(guò)程調(diào)用及其相應(yīng)方式的約定。 
通過(guò)soap,應(yīng)用程序不僅能夠?qū)崿F(xiàn)數(shù)據(jù)共享,還能夠調(diào)用遠(yuǎn)端應(yīng)用對(duì)象的方法和屬性,而不必了解對(duì)方的應(yīng)用程序結(jié)構(gòu),也不需要特定的二進(jìn)制代碼、運(yùn)行時(shí)庫(kù)以及任何平臺(tái)相關(guān)的條件。 .net my services通過(guò)soap協(xié)議來(lái)訪問(wèn)web service。 
xml 
.net my services的最底層是xml,一種基于sgml的文本形式的標(biāo)記語(yǔ)言。xml具有可自描述,以數(shù)據(jù)為中心的優(yōu)秀特性。關(guān)于xml的相關(guān)資料已經(jīng)有很多,在此不多贅述。 
十四. .net的開(kāi)發(fā)工具(visual studio.net)
在2001年亞特蘭大的tech ed 2001大會(huì)上,比爾·蓋茨對(duì)熱忱的開(kāi)發(fā)人員介紹了microsoft最新的開(kāi)發(fā)環(huán)境。不過(guò),visual studio .net作為net平臺(tái)的基石,不僅僅是一個(gè)開(kāi)發(fā)環(huán)境。visual studio.net是用開(kāi)發(fā)人員用于創(chuàng)建應(yīng)用程序的技術(shù)構(gòu)建的。 
由于通用語(yǔ)言運(yùn)行時(shí)(common language runtime),visual studio.net為c++、c#和vb程序員提供了通用的開(kāi)發(fā)環(huán)境。jscript程序員在創(chuàng)建asp.net 和 web服務(wù)應(yīng)用程序時(shí)將得到visual studio.net有限的支持。而xml開(kāi)發(fā)人員將非常喜歡它對(duì)xml文檔、xml大綱和xsl轉(zhuǎn)換的強(qiáng)大支持。 
實(shí)踐 
visual studio .net的設(shè)置很容易。安裝程序?qū)憬?jīng)過(guò)主要的3個(gè)步驟:更新系統(tǒng)組件,安裝 .net框架,增加visual studio .net。如果喜歡完全安裝,你還將得到c++及其類庫(kù)和工具,c#和vb。你還將獲得crystal reports、服務(wù)器組件及用于重新分布應(yīng)用程序的工具。在環(huán)境調(diào)用時(shí),將出現(xiàn)一個(gè)與瀏覽器類似的窗口,你會(huì)被帶到開(kāi)始頁(yè),此頁(yè)包含了對(duì)在線資源、更新、新聞和下載等等內(nèi)容的鏈接。下載鏈接特別有用,因?yàn)樗鼘⒛阒苯訋У絤icrosoft的msdn區(qū),在那里可以獲得最新的軟件工具包、源代碼示例及參考實(shí)現(xiàn)。web主機(jī)鏈接帶給你一個(gè)包含了支持asp.net的公司列表的網(wǎng)頁(yè)。如同microsoft所說(shuō): “每個(gè)公司給你提供一個(gè)實(shí)驗(yàn)用測(cè)試場(chǎng)所”。另一個(gè)鏈接使你能夠根據(jù)你目前的開(kāi)發(fā)類型修改造型。例如,人員可以選擇interdev造型,設(shè)置類似于visual studio 6的鍵盤(pán)和窗口布局,設(shè)置幫助文件過(guò)濾器——它只彈出與互聯(lián)網(wǎng)開(kāi)發(fā)相關(guān)的文檔。 visual studio.net充分利用了屏幕空間。首先,可以在屏幕上打開(kāi)多個(gè)窗口,然后通過(guò)跳格鍵快速在窗口間切換。還可在屏幕上固定窗口,或?qū)⑺鼈儾次坏狡聊蝗魏我贿叄鐚傩源翱凇.?dāng)鼠標(biāo)在泊位窗口滑過(guò)時(shí),它立刻滑動(dòng)到屏幕上。這就使得在導(dǎo)航窗口、工具條、屬性檢測(cè)器和編輯器間進(jìn)行轉(zhuǎn)換變得容易。環(huán)境是可配置的。從工具菜單中,可以為所有環(huán)境修改常規(guī)設(shè)置,并可以為每種語(yǔ)言設(shè)置選項(xiàng)。也就是說(shuō),如果你需要在vb和c#間進(jìn)行轉(zhuǎn)換,這種設(shè)置功能就很有用。另外除了控制visual studio.net的開(kāi)啟行為,你還可定制編輯器,設(shè)置字體和顏色,為工程和方案設(shè)置默認(rèn)存儲(chǔ)位置。開(kāi)發(fā)環(huán)境的特性包括對(duì)調(diào)試器和造型進(jìn)行了改進(jìn),出現(xiàn)了支持新部署模型的工具,提高了源代碼控制等等。作為快速參考,附表總結(jié)了其中的主要特性。 
編輯 
visual studio為visual studio.net所支持的所有語(yǔ)言提供了一個(gè)統(tǒng)一的代碼編輯器,而對(duì)每種語(yǔ)言又支持特定的特性。編輯器有了很大改進(jìn),如字提示、遞增搜索、代碼大綱、重疊文本、行號(hào)、分色顯示和快捷鍵。編輯器還提供了許多特定于語(yǔ)言的特性,如它能在輸入時(shí)完成原型和函數(shù)調(diào)用。 
除了編程語(yǔ)言,編輯器還支持html文檔、層疊樣式表單,甚至xml的開(kāi)發(fā)。事實(shí)上,xml文檔中的關(guān)鍵字,如xml聲明和屬性,已經(jīng)通過(guò)顏色高亮度顯示。而且,編輯器提供了源視圖和數(shù)據(jù)視圖。在數(shù)據(jù)視圖中,文檔的結(jié)構(gòu)在左側(cè)窗口中顯示出來(lái)。當(dāng)在這種層次中選擇一個(gè)xml元素時(shí),窗口右部的表顯示它的子元素,使你能夠挖掘它的元素?cái)?shù)據(jù)。然而,反常的是,并不是所有xml元素都能調(diào)入到數(shù)據(jù)視圖中。具有不可預(yù)測(cè)結(jié)構(gòu)的文檔,在試圖調(diào)入到數(shù)據(jù)視中時(shí),編輯器將不知所措。 
另一個(gè)令人愉快的是,visual studio .net使你能夠根據(jù)文檔實(shí)例創(chuàng)建xml大綱。默認(rèn)情況下文檔實(shí)例在文檔源視圖中打開(kāi)。你可仍處于源視或轉(zhuǎn)換到數(shù)據(jù)視圖中,然后在視圖中右擊,從彈出的菜單中選擇創(chuàng)建大綱。接著出現(xiàn)一個(gè)對(duì)話框,讓你輸入大綱文檔的名稱。一旦大綱創(chuàng)建了,對(duì)它的引用將插入到原始文檔實(shí)例中。對(duì)于那些不愿從頭編寫(xiě)xml大綱的人來(lái)說(shuō),visual studio.net使你能夠跳過(guò)開(kāi)頭。 
工程和解決方案 
另一個(gè)方便的特性是解決方案。一個(gè)給定的方案涉及到多個(gè)工程。解決方案像獨(dú)立的工程一樣,在解決方案窗口中進(jìn)行管理。因此,可以訪問(wèn)、創(chuàng)建、編輯和刪除為解決方案定義的任何工程中的單個(gè)文件。 
在設(shè)置獨(dú)立工程時(shí),vb、c#和c++程序員通常會(huì)發(fā)現(xiàn)此過(guò)程是很省力的。用vb在幾分鐘內(nèi)可以創(chuàng)建一個(gè)asp.net應(yīng)用程序。環(huán)境自動(dòng)在本地web服務(wù)器上創(chuàng)建虛擬目錄,增加aspx 和 global.asax文件、css樣式表單、一些部件、查找文件及一個(gè)包含了工程配置信息的xml文檔——web.config。你所做的只是在web瀏覽器中執(zhí)行aspx文檔以運(yùn)行應(yīng)用程序。 
另一方面,jscript開(kāi)發(fā)人員將面臨困難,因?yàn)閖script沒(méi)有完全與microsoft開(kāi)發(fā)環(huán)境(mde)集成起來(lái)。這意味著必須手動(dòng)設(shè)置虛擬目錄,手工創(chuàng)建、管理許多文件。 
語(yǔ)言變化 
如同它所支持的平臺(tái)一樣,visual studio .net在編程方面也發(fā)生了大變化。由于vb與通用語(yǔ)言運(yùn)行時(shí)的集成,vb程序員將感到巨大變化。你可能需要重新從頭設(shè)計(jì)整個(gè)代碼塊。對(duì)于初學(xué)者來(lái)說(shuō),繼承性和多態(tài)性意味著vb最終會(huì)成為真正的面向?qū)ο蟮某绦蛘Z(yǔ)言。vb現(xiàn)在可以超越方法,重載方法調(diào)用。vb還引入了結(jié)構(gòu)化異常處理,支持類似于com的接口和多線程。另外,很多語(yǔ)言成分被拋棄了,有一些被新屬性、方法和函數(shù)所代替。 
jscript也可以發(fā)現(xiàn)jscript發(fā)生了重大變化。由于編譯語(yǔ)言的本質(zhì),所有jscript變量現(xiàn)在必須聲明。還引入了數(shù)據(jù)類型。以前,jscript程序員創(chuàng)建沒(méi)有與數(shù)據(jù)相關(guān)連的變量。然而,現(xiàn)在.net 應(yīng)用程序特別要求為變量指定數(shù)據(jù)類型。這樣做不會(huì)丟下jscript程序員,但數(shù)據(jù)類型的引入使jscript程序員遇到了以前沒(méi)有遇到過(guò)的問(wèn)題(如類型兼容性)。 jscript還引入了類、函數(shù)重載、對(duì)屬性的獲取和設(shè)置。增加的其他語(yǔ)言特性包括常量聲明、枚舉器和新的導(dǎo)入聲明。它肯定不是上一代的腳本語(yǔ)言。 
visual studio .net是特性非常豐富的開(kāi)發(fā)環(huán)境,通用語(yǔ)言的支持能力使開(kāi)發(fā)人員能在c++、vb和c#間自由轉(zhuǎn)換。編輯器還支持xml文檔、xml大綱、html和css的創(chuàng)建。調(diào)試器和profiler有所增強(qiáng),新的工具支持部署、源代碼控制和其他許多特性。當(dāng)然,對(duì)可能的.net程序員還有很多重要變化。這就是為什么無(wú)法想象沒(méi)有visual studio如何創(chuàng)建.net應(yīng)用程序的原因。 
十五. 結(jié)語(yǔ)
.net為開(kāi)發(fā)者提供了更好、更有威力的環(huán)境
.net的初創(chuàng),是微軟向前邁出的一大步。通過(guò)提供一個(gè)開(kāi)發(fā)windows應(yīng)用程序的新基礎(chǔ),這家公司幾乎是強(qiáng)迫開(kāi)發(fā)人員開(kāi)始攀登一個(gè)冗長(zhǎng)的學(xué)習(xí)曲線。然而web services、.net framework、.net my services以及.net其他部分所帶來(lái)的好處。這個(gè)嶄新的開(kāi)發(fā)環(huán)境更加現(xiàn)在,并且提供更多服務(wù)。一旦開(kāi)發(fā)人員掌握了.net核心技術(shù),他們的生產(chǎn)力將會(huì)大大提高;運(yùn)用內(nèi)建的web services支持,便可開(kāi)發(fā)出全新類型的應(yīng)用程序。最終,.net很可能達(dá)到終極目標(biāo):以最少的時(shí)間,開(kāi)發(fā)出最好的軟件。
為了獲得更強(qiáng)大的威力,必須接受改變
但是,為了獲得這些強(qiáng)大的威力,開(kāi)發(fā)人員必須忍受的負(fù)面影響是:大幅度的變化。windows開(kāi)發(fā)人員必須學(xué)習(xí)許多新語(yǔ)言特性(如果學(xué)習(xí)的是c#,那甚至是門(mén)全新語(yǔ)言)、一個(gè)(至少某部分)既大又新的標(biāo)準(zhǔn)類庫(kù),以及五花八門(mén)諸如web services等等的新概念。某些開(kāi)發(fā)人員甚至?xí)霈F(xiàn)信心挫折,因?yàn)樗麄冊(cè)械暮艽笠徊糠种R(shí)失去了作用。例如,除非你要和現(xiàn)有代碼進(jìn)行互動(dòng),否則com在..net framework之中派不上什么用場(chǎng),因此,微軟環(huán)境中的軟件開(kāi)發(fā)人員千辛萬(wàn)苦才學(xué)得的com細(xì)節(jié)知識(shí),對(duì)于開(kāi)發(fā)framework-based應(yīng)用程序已經(jīng)沒(méi)有什么意義。隨著.net framework的windows forms的引入,現(xiàn)有的gui技術(shù)變得價(jià)值不大。即使在數(shù)據(jù)訪問(wèn)方面,也有相當(dāng)大的不同,因?yàn)閍do已經(jīng)被ado.net所取代。
然而,抱怨是沒(méi)有任何意義的,對(duì)于希望在這個(gè)環(huán)境下工作的開(kāi)發(fā)人員來(lái)說(shuō),唯一的選擇是投入必要的時(shí)間,開(kāi)始和.net進(jìn)行一番搏斗,因?yàn)?net是在windows上開(kāi)發(fā)應(yīng)用程序的未來(lái)。