top
Loading...
C#搶鮮快報之FAQ20
數周前,微軟公司在2000年6月份舉行的“職業開發人員技術大會”(pdc)上正式發布了c#語言,自此掀開了一部新興高級語言的篇章。關于這種新語言,有很多很多傳聞,也有很多網友急于想了解它,對此,微軟通用運行庫開發小組的高級程序員jeffrey接受了網友的提問,并一一作了回答,下面就是有關.net和c#語言問答的整理。


q1.問:搞了這么久,我一直都沒弄明白,.net是運行庫呢還是開發平臺哪?

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


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

答:這個問題現在來回答還有點為時尚早。反正我就是喜歡用c#來編程!(暈倒...)因為它十分類似于c++,所以學起來幾乎不花什么時間。微軟現在已經將c#提交到ecma標準化組織,如果獲得通過,那么任何一個公司都可以開發出c#的編譯器。不過,設計c#語言最初的目的就是要將它作成一種完全依賴并且完全兼容于通用語言運行庫的語言,沒有運行庫的支持,c#是不會如此強大的。要在其他平臺上開發編譯器很容易,但是移植運行庫就是一件大工程了。


q3.問:能不能講講c#在哪些具體問題上比java有優勢?

答:雖然大家很有誠意地看著我,但是我還是想告訴大家:我沒學過java!不過,我不妨說說c#和c++的差別:c#有更簡單的語法,緊密集成的組件和函數,類型安全等等。要是想知道c# 和java的區別——去問別人吧,別問我。


q4.問:在c#語言中訪問數據庫,使用ado+是不是最好和最有效的方法?或者c#的運行庫中有更好的oledb api封裝函數嗎?

答:.net類庫中包括一個名叫system.data的名字空間,其中就有很多訪問數據庫的類。c#程序員可以很方便地利用這些類來訪問數據庫,不需要用到ado+。


q5.問:c#可不可以開發windows程序?不會只能開發分布式應用吧?

答:當然可以!c#可以開發任何古典風格的windows程序。不僅如此,不管是控制程序、圖形程序、nt服務程序,還是普通組件,甚至是web頁面,除了硬件驅動程序,都可以用c#開發出來。實際上,這些功能都是從運行庫中實現的,而 c#語言本身并不提供。


q6.問:c#和winforms之間是什么關系?

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


q7.問:傳聞c#已經被提交到ecma標準化組織等待批準,是嗎?
答:對!到q2去看看吧。

q8.問:atl和com在.net新技術中會扮演怎樣的角色呢?

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


q9.問:為什么c#沒象c++那樣提供模板功能?

答:啊……啊……又來了,再說一遍好啦,模板其實應該是運行庫提供的功能,不關c#語言的事。在c#中沒有提供模板功能大致有兩點原因。首先呢,執行模板有一定的困難,所以微軟沒打算在c#的第一版中提供這樣的功能,以后的版本中會有類似的功能出現的。其次呢,因為這里的運行庫是支持多語言的運行庫(不僅僅是c#),如果在運行庫中引入模板,就意味著所有使用這個運行庫的語言都必須支持模板功能,在這一點上,微軟不得不慎重考慮,所以也不打算現在就把模板加進去。


q10.問:在c#中會不會用真正的關鍵字換掉那些把atl和com搞得亂糟糟的偽關鍵字?象什么ole_color、bool、variant_bool、dispid_xxxxx什么的,煩都煩死了。
答:這個您放心,絕對要換!每種類型在.net類庫中都有新名字了。


q11.問:我們現在看到了有限制程序的擴展和改善,除此以外,將來c++在ms或者.net中的地位又將如何?

答:c++語言在微軟的各種語言中是最獨特的一種,它也是唯一可以允許程序員開發無限制低級程序的語言。所以,我們常常可以看見程序員們用c++寫性能要求較高的無限制的算法代碼,同時也用c++編寫有限制的安全程度很高的組件代碼。我認為微軟會繼續保留c++的現狀,并維持很長一段時間。畢竟,驅動程序需要它,windows的基礎也是它,很多產品也使用它。


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

答:.net運行庫提供了代碼訪問安全特性,它允許管理員和用戶根據代碼的id來配置安全等級。在缺省情況下,從internet和intranet下載的代碼都不允許訪問任何本地文件和資源。比方說,我寫了個程序把它放到網絡上,然后讓它在網絡上的共享目錄中運行,如果它要訪問我本地的一些資源,那么它將會無情地被異常扔出去,呵呵,當然,如果拷貝到本地硬盤上運行則一切正常。


q13.問:在我的機器上有c#程序,那么我是不是需要安裝了.net運行庫才能運行它?

答:對。所有的有限制程序都需要一個管理程序來限制它們;在這里,運行庫就是管理程序。微軟在以后將會把運行庫打包起來免費分發,而現在最終用戶必須從msdn上安裝整個.net的sdk包才能運行c#。


q14.問:有人曾經提到過,c#的類可以從vb中聲明的類中派生出來,是不是真的啊?哪里有這樣的例子程序呢?

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


q15.問:那能不能從c++類派生出c#類來呢?如果可以該怎么做?

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


q16.問:新版本的mfc可以選擇在限制環境下運行嗎?

答:我平時沒怎么關注mfc,不過我可以確信答案是否定的。mfc從來都沒有被限制過。對于限制程序,大家應該使用winforms來管理。


q17.問:如果新版的mfc能夠在一個有限環境中運行,它是不是可以在不需要.net運行庫的情況下建立win32桌面應用?

答:我敢肯定mfc不可能這樣,并且它從來都不需要什么運行庫。


q18.問:有人說“c#只是微軟windows另一種特有語言罷了,其他平臺是不能用的”,你同意這種說法嗎?

答:c#是針對“通用語言運行庫”(clr)而開發的,而不是針對windows。如果運行庫被移植到其他系統上,那么c#也可以被移植到那里。


q19.問:傳聞vb7中可以象mfc那樣建立運行庫的靜態鏈接,是不是真的哦?如果是真的,那c# 是不是就可以創建可以單獨運行的程序了呢?

答:絕對假聞。沒有哪種語言可以創建運行庫的靜態鏈接。


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

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

北斗有巢氏 有巢氏北斗