直播中
q1.問:搞了這么久,我一直都沒弄明白,.net是運行庫呢還是開發(fā)平臺哪?
答:都是!并且還不止這些呢——微軟的宏偉目標(biāo)是讓microsoft.net徹底改變軟件的開發(fā)方式、發(fā)行方式、使用方式等等,并且不止是針對微軟一家,而是面向所有公司!今年7月份在pdc展會上分發(fā)的是“.net架構(gòu)”包,“.net架構(gòu)”是microsoft.net計劃中首先問世的一部分,它包括了兩方面的組件:“.net通用運行庫”和“.net類庫”。最近傳來好消息說這兩個組件已經(jīng)被打包到“.net架構(gòu)sdk”中,放在微軟的站上免費供大家下載,有興趣的朋友一定要去試試看哦!另外,這個sdk中還包括c#、c++、javascript和vb的命令行編譯器,使用這些編譯器就可以開發(fā)應(yīng)用程序和組件了,從這個角度來看,.net架構(gòu)首先是一個開發(fā)平臺,因為它提供了運行庫和類庫,并且,下一個即將面市的就是visual studio.net,其中包括了更加全面的sdk和圖形化的開發(fā)界面、向?qū)?、工具等等,更象一個開發(fā)平臺了。但是.net的運行庫其實已經(jīng)融合到操作系統(tǒng)中,所以說它為運行庫也是可以的。
q2.問:c#成為一種通用性語言的可能性究竟有多大???我的意思是說,不僅僅是微軟一家支持的語言。另外,如果真是這樣,現(xiàn)在有否其他軟件公司承諾在非windows平臺上提供c#的編譯器呢?
答:這個問題現(xiàn)在來回答還有點為時尚早。反正我就是喜歡用c#來編程!(暈倒...)因為它十分類似于c++,所以學(xué)起來幾乎不花什么時間。微軟現(xiàn)在已經(jīng)將c#提交到ecma標(biāo)準(zhǔn)化組織,如果獲得通過,那么任何一個公司都可以開發(fā)出c#的編譯器。不過,設(shè)計c#語言最初的目的就是要將它作成一種完全依賴并且完全兼容于通用語言運行庫的語言,沒有運行庫的支持,c#是不會如此強大的。要在其他平臺上開發(fā)編譯器很容易,但是移植運行庫就是一件大工程了。
q3.問:能不能講講c#在哪些具體問題上比java有優(yōu)勢?
答:雖然大家很有誠意地看著我,但是我還是想告訴大家:我沒學(xué)過java!不過,我不妨說說c#和c++的差別:c#有更簡單的語法,緊密集成的組件和函數(shù),類型安全等等。要是想知道c# 和java的區(qū)別——去問別人吧,別問我。
q4.問:在c#語言中訪問數(shù)據(jù)庫,使用ado+是不是最好和最有效的方法?或者c#的運行庫中有更好的oledb api封裝函數(shù)嗎?
答:.net類庫中包括一個名叫system.data的名字空間,其中就有很多訪問數(shù)據(jù)庫的類。c#程序員可以很方便地利用這些類來訪問數(shù)據(jù)庫,不需要用到ado+。
q5.問:c#可不可以開發(fā)windows程序?不會只能開發(fā)分布式應(yīng)用吧?
答:當(dāng)然可以!c#可以開發(fā)任何古典風(fēng)格的windows程序。不僅如此,不管是控制程序、圖形程序、nt服務(wù)程序,還是普通組件,甚至是web頁面,除了硬件驅(qū)動程序,都可以用c#開發(fā)出來。實際上,這些功能都是從運行庫中實現(xiàn)的,而 c#語言本身并不提供。
q6.問:c#和winforms之間是什么關(guān)系?
答:winforms是.net類庫中的類集,其中封裝了win32類中的windows,brushes和pens類等等。任何使用了運行庫的語言(包括c#)都可以建立這些類的實例并進行控制。就我所知,winforms和j++的wfc類庫有些類似的地方。
q7.問:傳聞c#已經(jīng)被提交到ecma標(biāo)準(zhǔn)化組織等待批準(zhǔn),是嗎?
答:對!到q2去看看吧。
q8.問:atl和com在.net新技術(shù)中會扮演怎樣的角色呢?
答:.net架構(gòu)中取代了很多老技術(shù),象atl、mfc、c運行庫、標(biāo)準(zhǔn)模板庫(stl)等等類庫都不再出現(xiàn)了。.net統(tǒng)一了編程類庫,開發(fā)起來比使用這些老技術(shù)容易多了。我猜很多程序員看到.net的這些優(yōu)勢后會義無返顧地選擇離開老技術(shù)的。不過,老玩意還是有一定的優(yōu)點的:它的性能相對來說比較好。如果你需要特別突出性能,那么還是可以繼續(xù)擺弄這些老玩意的。另外,對于com來講,用.net來開發(fā)相同功能的組件會比以前容易幾個數(shù)量級,并且還能輕松搞定各個組件之間常常出現(xiàn)的互操作性要求。目前在.net代碼中還不能直接使用com+和交易服務(wù),但是可以通過間接的方法來使用,只不過在性能上要打些折扣。
q9.問:為什么c#沒象c++那樣提供模板功能?
答:啊……啊……又來了,再說一遍好啦,模板其實應(yīng)該是運行庫提供的功能,不關(guān)c#語言的事。在c#中沒有提供模板功能大致有兩點原因。首先呢,執(zhí)行模板有一定的困難,所以微軟沒打算在c#的第一版中提供這樣的功能,以后的版本中會有類似的功能出現(xiàn)的。其次呢,因為這里的運行庫是支持多語言的運行庫(不僅僅是c#),如果在運行庫中引入模板,就意味著所有使用這個運行庫的語言都必須支持模板功能,在這一點上,微軟不得不慎重考慮,所以也不打算現(xiàn)在就把模板加進去。
q10.問:在c#中會不會用真正的關(guān)鍵字換掉那些把atl和com搞得亂糟糟的偽關(guān)鍵字?象什么ole_color、bool、variant_bool、dispid_xxxxx什么的,煩都煩死了。
答:這個您放心,絕對要換!每種類型在.net類庫中都有新名字了。
q11.問:我們現(xiàn)在看到了有限制程序的擴展和改善,除此以外,將來c++在ms或者.net中的地位又將如何?
答:c++語言在微軟的各種語言中是最獨特的一種,它也是唯一可以允許程序員開發(fā)無限制低級程序的語言。所以,我們常??梢钥匆姵绦騿T們用c++寫性能要求較高的無限制的算法代碼,同時也用c++編寫有限制的安全程度很高的組件代碼。我認(rèn)為微軟會繼續(xù)保留c++的現(xiàn)狀,并維持很長一段時間。畢竟,驅(qū)動程序需要它,windows的基礎(chǔ)也是它,很多產(chǎn)品也使用它。
q12.問:既然.net支持activex/com,那么如何才能保證一個運行在瀏覽器中的c#程序的安全性呢?
答:.net運行庫提供了代碼訪問安全特性,它允許管理員和用戶根據(jù)代碼的id來配置安全等級。在缺省情況下,從internet和intranet下載的代碼都不允許訪問任何本地文件和資源。比方說,我寫了個程序把它放到網(wǎng)絡(luò)上,然后讓它在網(wǎng)絡(luò)上的共享目錄中運行,如果它要訪問我本地的一些資源,那么它將會無情地被異常扔出去,呵呵,當(dāng)然,如果拷貝到本地硬盤上運行則一切正常。
q13.問:在我的機器上有c#程序,那么我是不是需要安裝了.net運行庫才能運行它?
答:對。所有的有限制程序都需要一個管理程序來限制它們;在這里,運行庫就是管理程序。微軟在以后將會把運行庫打包起來免費分發(fā),而現(xiàn)在最終用戶必須從msdn上安裝整個.net的sdk包才能運行c#。
q14.問:有人曾經(jīng)提到過,c#的類可以從vb中聲明的類中派生出來,是不是真的?。磕睦镉羞@樣的例子程序呢?
答:確實是真的。實際上,只要是使用運行庫的語言,都可以做到在一種語言中聲明類,而在另一種語言中派生類。并且,visual studio的調(diào)試器將會完全支持跨語言的程序調(diào)試,在函數(shù)堆棧調(diào)試窗口的每個條目中都會顯示堆棧中的函數(shù)是什么以及它們分別用何種語言寫成;另外,你甚至還可以跨語言地處理程序中的異常錯誤。這種特性確實棒極了,在pdc上演示這段功能的時候,大家都熱烈地鼓起掌來。在.net的sdk中有例子程序演示其做法,十分簡單。
q15.問:那能不能從c++類派生出c#類來呢?如果可以該怎么做?
答:上面提到過,如果你使用有限制的語言,那么自然就可以,不過要是你使用c++中無限制的部分,就不行了。
q16.問:新版本的mfc可以選擇在限制環(huán)境下運行嗎?
答:我平時沒怎么關(guān)注mfc,不過我可以確信答案是否定的。mfc從來都沒有被限制過。對于限制程序,大家應(yīng)該使用winforms來管理。
q17.問:如果新版的mfc能夠在一個有限環(huán)境中運行,它是不是可以在不需要.net運行庫的情況下建立win32桌面應(yīng)用?
答:我敢肯定mfc不可能這樣,并且它從來都不需要什么運行庫。
q18.問:有人說“c#只是微軟windows另一種特有語言罷了,其他平臺是不能用的”,你同意這種說法嗎?
答:c#是針對“通用語言運行庫”(clr)而開發(fā)的,而不是針對windows。如果運行庫被移植到其他系統(tǒng)上,那么c#也可以被移植到那里。
q19.問:傳聞vb7中可以象mfc那樣建立運行庫的靜態(tài)鏈接,是不是真的哦?如果是真的,那c# 是不是就可以創(chuàng)建可以單獨運行的程序了呢?
答:絕對假聞。沒有哪種語言可以創(chuàng)建運行庫的靜態(tài)鏈接。
q20.問:c#使用資源文件嗎?如果不是這樣,它采用何種機制讓用戶定制程序呢?
答:.net架構(gòu)設(shè)計器采用了一個新的資源模型。資源數(shù)據(jù)可以象win23一樣嵌在exe或者dll文件中,也可以以獨立文件的形式存在,比如一張bmp或者jpg圖片。限于篇幅,這里就不再贅述了。