明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

C#搶鮮快報(bào)之FAQ20

[摘要]數(shù)周前,微軟公司在2000年6月份舉行的“職業(yè)開(kāi)發(fā)人員技術(shù)大會(huì)”(pdc)上正式發(fā)布了c#語(yǔ)言,自此掀開(kāi)了一部新興高級(jí)語(yǔ)言的篇章。關(guān)于這種新語(yǔ)言,有很多很多傳聞,也有很多網(wǎng)友急于想了解它,對(duì)此,微軟...
數(shù)周前,微軟公司在2000年6月份舉行的“職業(yè)開(kāi)發(fā)人員技術(shù)大會(huì)”(pdc)上正式發(fā)布了c#語(yǔ)言,自此掀開(kāi)了一部新興高級(jí)語(yǔ)言的篇章。關(guān)于這種新語(yǔ)言,有很多很多傳聞,也有很多網(wǎng)友急于想了解它,對(duì)此,微軟通用運(yùn)行庫(kù)開(kāi)發(fā)小組的高級(jí)程序員jeffrey接受了網(wǎng)友的提問(wèn),并一一作了回答,下面就是有關(guān).net和c#語(yǔ)言問(wèn)答的整理。


q1.問(wèn):搞了這么久,我一直都沒(méi)弄明白,.net是運(yùn)行庫(kù)呢還是開(kāi)發(fā)平臺(tái)哪?

答:都是!并且還不止這些呢——微軟的宏偉目標(biāo)是讓microsoft.net徹底改變軟件的開(kāi)發(fā)方式、發(fā)行方式、使用方式等等,并且不止是針對(duì)微軟一家,而是面向所有公司!今年7月份在pdc展會(huì)上分發(fā)的是“.net架構(gòu)”包,“.net架構(gòu)”是microsoft.net計(jì)劃中首先問(wèn)世的一部分,它包括了兩方面的組件:“.net通用運(yùn)行庫(kù)”和“.net類庫(kù)”。最近傳來(lái)好消息說(shuō)這兩個(gè)組件已經(jīng)被打包到“.net架構(gòu)sdk”中,放在微軟的站上免費(fèi)供大家下載,有興趣的朋友一定要去試試看哦!另外,這個(gè)sdk中還包括c#、c++、javascript和vb的命令行編譯器,使用這些編譯器就可以開(kāi)發(fā)應(yīng)用程序和組件了,從這個(gè)角度來(lái)看,.net架構(gòu)首先是一個(gè)開(kāi)發(fā)平臺(tái),因?yàn)樗峁┝诉\(yùn)行庫(kù)和類庫(kù),并且,下一個(gè)即將面市的就是visual studio.net,其中包括了更加全面的sdk和圖形化的開(kāi)發(fā)界面、向?qū)、工具等等,更象一個(gè)開(kāi)發(fā)平臺(tái)了。但是.net的運(yùn)行庫(kù)其實(shí)已經(jīng)融合到操作系統(tǒng)中,所以說(shuō)它為運(yùn)行庫(kù)也是可以的。


q2.問(wèn):c#成為一種通用性語(yǔ)言的可能性究竟有多大?我的意思是說(shuō),不僅僅是微軟一家支持的語(yǔ)言。另外,如果真是這樣,現(xiàn)在有否其他軟件公司承諾在非windows平臺(tái)上提供c#的編譯器呢?

答:這個(gè)問(wèn)題現(xiàn)在來(lái)回答還有點(diǎn)為時(shí)尚早。反正我就是喜歡用c#來(lái)編程。〞灥...)因?yàn)樗诸愃朴赾++,所以學(xué)起來(lái)幾乎不花什么時(shí)間。微軟現(xiàn)在已經(jīng)將c#提交到ecma標(biāo)準(zhǔn)化組織,如果獲得通過(guò),那么任何一個(gè)公司都可以開(kāi)發(fā)出c#的編譯器。不過(guò),設(shè)計(jì)c#語(yǔ)言最初的目的就是要將它作成一種完全依賴并且完全兼容于通用語(yǔ)言運(yùn)行庫(kù)的語(yǔ)言,沒(méi)有運(yùn)行庫(kù)的支持,c#是不會(huì)如此強(qiáng)大的。要在其他平臺(tái)上開(kāi)發(fā)編譯器很容易,但是移植運(yùn)行庫(kù)就是一件大工程了。


q3.問(wèn):能不能講講c#在哪些具體問(wèn)題上比java有優(yōu)勢(shì)?

答:雖然大家很有誠(chéng)意地看著我,但是我還是想告訴大家:我沒(méi)學(xué)過(guò)java!不過(guò),我不妨說(shuō)說(shuō)c#和c++的差別:c#有更簡(jiǎn)單的語(yǔ)法,緊密集成的組件和函數(shù),類型安全等等。要是想知道c# 和java的區(qū)別——去問(wèn)別人吧,別問(wèn)我。


q4.問(wèn):在c#語(yǔ)言中訪問(wèn)數(shù)據(jù)庫(kù),使用ado+是不是最好和最有效的方法?或者c#的運(yùn)行庫(kù)中有更好的oledb api封裝函數(shù)嗎?

答:.net類庫(kù)中包括一個(gè)名叫system.data的名字空間,其中就有很多訪問(wèn)數(shù)據(jù)庫(kù)的類。c#程序員可以很方便地利用這些類來(lái)訪問(wèn)數(shù)據(jù)庫(kù),不需要用到ado+。


q5.問(wèn):c#可不可以開(kāi)發(fā)windows程序?不會(huì)只能開(kāi)發(fā)分布式應(yīng)用吧?

答:當(dāng)然可以!c#可以開(kāi)發(fā)任何古典風(fēng)格的windows程序。不僅如此,不管是控制程序、圖形程序、nt服務(wù)程序,還是普通組件,甚至是web頁(yè)面,除了硬件驅(qū)動(dòng)程序,都可以用c#開(kāi)發(fā)出來(lái)。實(shí)際上,這些功能都是從運(yùn)行庫(kù)中實(shí)現(xiàn)的,而 c#語(yǔ)言本身并不提供。


q6.問(wèn):c#和winforms之間是什么關(guān)系?

答:winforms是.net類庫(kù)中的類集,其中封裝了win32類中的windows,brushes和pens類等等。任何使用了運(yùn)行庫(kù)的語(yǔ)言(包括c#)都可以建立這些類的實(shí)例并進(jìn)行控制。就我所知,winforms和j++的wfc類庫(kù)有些類似的地方。


q7.問(wèn):傳聞c#已經(jīng)被提交到ecma標(biāo)準(zhǔn)化組織等待批準(zhǔn),是嗎?
答:對(duì)!到q2去看看吧。

q8.問(wèn):atl和com在.net新技術(shù)中會(huì)扮演怎樣的角色呢?

答:.net架構(gòu)中取代了很多老技術(shù),象atl、mfc、c運(yùn)行庫(kù)、標(biāo)準(zhǔn)模板庫(kù)(stl)等等類庫(kù)都不再出現(xiàn)了。.net統(tǒng)一了編程類庫(kù),開(kāi)發(fā)起來(lái)比使用這些老技術(shù)容易多了。我猜很多程序員看到.net的這些優(yōu)勢(shì)后會(huì)義無(wú)返顧地選擇離開(kāi)老技術(shù)的。不過(guò),老玩意還是有一定的優(yōu)點(diǎn)的:它的性能相對(duì)來(lái)說(shuō)比較好。如果你需要特別突出性能,那么還是可以繼續(xù)擺弄這些老玩意的。另外,對(duì)于com來(lái)講,用.net來(lái)開(kāi)發(fā)相同功能的組件會(huì)比以前容易幾個(gè)數(shù)量級(jí),并且還能輕松搞定各個(gè)組件之間常常出現(xiàn)的互操作性要求。目前在.net代碼中還不能直接使用com+和交易服務(wù),但是可以通過(guò)間接的方法來(lái)使用,只不過(guò)在性能上要打些折扣。


q9.問(wèn):為什么c#沒(méi)象c++那樣提供模板功能?

答:啊……啊……又來(lái)了,再說(shuō)一遍好啦,模板其實(shí)應(yīng)該是運(yùn)行庫(kù)提供的功能,不關(guān)c#語(yǔ)言的事。在c#中沒(méi)有提供模板功能大致有兩點(diǎn)原因。首先呢,執(zhí)行模板有一定的困難,所以微軟沒(méi)打算在c#的第一版中提供這樣的功能,以后的版本中會(huì)有類似的功能出現(xiàn)的。其次呢,因?yàn)檫@里的運(yùn)行庫(kù)是支持多語(yǔ)言的運(yùn)行庫(kù)(不僅僅是c#),如果在運(yùn)行庫(kù)中引入模板,就意味著所有使用這個(gè)運(yùn)行庫(kù)的語(yǔ)言都必須支持模板功能,在這一點(diǎn)上,微軟不得不慎重考慮,所以也不打算現(xiàn)在就把模板加進(jìn)去。


q10.問(wèn):在c#中會(huì)不會(huì)用真正的關(guān)鍵字換掉那些把a(bǔ)tl和com搞得亂糟糟的偽關(guān)鍵字?象什么ole_color、bool、variant_bool、dispid_xxxxx什么的,煩都煩死了。
答:這個(gè)您放心,絕對(duì)要換!每種類型在.net類庫(kù)中都有新名字了。


q11.問(wèn):我們現(xiàn)在看到了有限制程序的擴(kuò)展和改善,除此以外,將來(lái)c++在ms或者.net中的地位又將如何?

答:c++語(yǔ)言在微軟的各種語(yǔ)言中是最獨(dú)特的一種,它也是唯一可以允許程序員開(kāi)發(fā)無(wú)限制低級(jí)程序的語(yǔ)言。所以,我們常?梢钥匆(jiàn)程序員們用c++寫(xiě)性能要求較高的無(wú)限制的算法代碼,同時(shí)也用c++編寫(xiě)有限制的安全程度很高的組件代碼。我認(rèn)為微軟會(huì)繼續(xù)保留c++的現(xiàn)狀,并維持很長(zhǎng)一段時(shí)間。畢竟,驅(qū)動(dòng)程序需要它,windows的基礎(chǔ)也是它,很多產(chǎn)品也使用它。


q12.問(wèn):既然.net支持activex/com,那么如何才能保證一個(gè)運(yùn)行在瀏覽器中的c#程序的安全性呢?

答:.net運(yùn)行庫(kù)提供了代碼訪問(wèn)安全特性,它允許管理員和用戶根據(jù)代碼的id來(lái)配置安全等級(jí)。在缺省情況下,從internet和intranet下載的代碼都不允許訪問(wèn)任何本地文件和資源。比方說(shuō),我寫(xiě)了個(gè)程序把它放到網(wǎng)絡(luò)上,然后讓它在網(wǎng)絡(luò)上的共享目錄中運(yùn)行,如果它要訪問(wèn)我本地的一些資源,那么它將會(huì)無(wú)情地被異常扔出去,呵呵,當(dāng)然,如果拷貝到本地硬盤(pán)上運(yùn)行則一切正常。


q13.問(wèn):在我的機(jī)器上有c#程序,那么我是不是需要安裝了.net運(yùn)行庫(kù)才能運(yùn)行它?

答:對(duì)。所有的有限制程序都需要一個(gè)管理程序來(lái)限制它們;在這里,運(yùn)行庫(kù)就是管理程序。微軟在以后將會(huì)把運(yùn)行庫(kù)打包起來(lái)免費(fèi)分發(fā),而現(xiàn)在最終用戶必須從msdn上安裝整個(gè).net的sdk包才能運(yùn)行c#。


q14.問(wèn):有人曾經(jīng)提到過(guò),c#的類可以從vb中聲明的類中派生出來(lái),是不是真的。磕睦镉羞@樣的例子程序呢?

答:確實(shí)是真的。實(shí)際上,只要是使用運(yùn)行庫(kù)的語(yǔ)言,都可以做到在一種語(yǔ)言中聲明類,而在另一種語(yǔ)言中派生類。并且,visual studio的調(diào)試器將會(huì)完全支持跨語(yǔ)言的程序調(diào)試,在函數(shù)堆棧調(diào)試窗口的每個(gè)條目中都會(huì)顯示堆棧中的函數(shù)是什么以及它們分別用何種語(yǔ)言寫(xiě)成;另外,你甚至還可以跨語(yǔ)言地處理程序中的異常錯(cuò)誤。這種特性確實(shí)棒極了,在pdc上演示這段功能的時(shí)候,大家都熱烈地鼓起掌來(lái)。在.net的sdk中有例子程序演示其做法,十分簡(jiǎn)單。


q15.問(wèn):那能不能從c++類派生出c#類來(lái)呢?如果可以該怎么做?

答:上面提到過(guò),如果你使用有限制的語(yǔ)言,那么自然就可以,不過(guò)要是你使用c++中無(wú)限制的部分,就不行了。


q16.問(wèn):新版本的mfc可以選擇在限制環(huán)境下運(yùn)行嗎?

答:我平時(shí)沒(méi)怎么關(guān)注mfc,不過(guò)我可以確信答案是否定的。mfc從來(lái)都沒(méi)有被限制過(guò)。對(duì)于限制程序,大家應(yīng)該使用winforms來(lái)管理。


q17.問(wèn):如果新版的mfc能夠在一個(gè)有限環(huán)境中運(yùn)行,它是不是可以在不需要.net運(yùn)行庫(kù)的情況下建立win32桌面應(yīng)用?

答:我敢肯定mfc不可能這樣,并且它從來(lái)都不需要什么運(yùn)行庫(kù)。


q18.問(wèn):有人說(shuō)“c#只是微軟windows另一種特有語(yǔ)言罷了,其他平臺(tái)是不能用的”,你同意這種說(shuō)法嗎?

答:c#是針對(duì)“通用語(yǔ)言運(yùn)行庫(kù)”(clr)而開(kāi)發(fā)的,而不是針對(duì)windows。如果運(yùn)行庫(kù)被移植到其他系統(tǒng)上,那么c#也可以被移植到那里。


q19.問(wèn):傳聞vb7中可以象mfc那樣建立運(yùn)行庫(kù)的靜態(tài)鏈接,是不是真的哦?如果是真的,那c# 是不是就可以創(chuàng)建可以單獨(dú)運(yùn)行的程序了呢?

答:絕對(duì)假聞。沒(méi)有哪種語(yǔ)言可以創(chuàng)建運(yùn)行庫(kù)的靜態(tài)鏈接。


q20.問(wèn):c#使用資源文件嗎?如果不是這樣,它采用何種機(jī)制讓用戶定制程序呢?

答:.net架構(gòu)設(shè)計(jì)器采用了一個(gè)新的資源模型。資源數(shù)據(jù)可以象win23一樣嵌在exe或者dll文件中,也可以以獨(dú)立文件的形式存在,比如一張bmp或者jpg圖片。限于篇幅,這里就不再贅述了。