C#搶鮮快報之FAQ20 (轉)

a400發表於2007-08-12
C#搶鮮快報之FAQ20 (轉)[@more@]
 數週前,公司在2000年6月份舉行的“職業開發人員技術大會”(PDC)上正式釋出了語言,自此掀開了一部新興高階語言的篇章。關於這種新語言,有很多很多傳聞,也有很多網友急於想了解它,對此,微軟通用執行庫開發小組的高階員Jeffrey接受了網友的提問,並一一作了回答,下面就是有關和C#語言問答的整理。


Q1.問:搞了這麼久,我一直都沒弄明白,.NET是執行庫呢還是開發平臺哪?

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


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

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


Q3.問:能不能講講C#在哪些具體問題上比JAVA有優勢?

答:雖然大家很有誠意地看著我,但是我還是想告訴大家:我沒學過JAVA!不過,我不妨說說C#和C++的差別:C#有更簡單的語法,緊密整合的元件和,型別等等。要是想知道C# 和JAVA的區別——去問別人吧,別問我。


Q4.問:在C#語言中訪問,使用ADO+是不是最好和最有效的方法?或者C#的執行庫中有更好的OLE 封裝函式嗎?

答:.NET類庫中包括一個名叫System.Data的名字空間,其中就有很多訪問資料庫的類。C#程式設計師可以很方便地利用這些類來訪問資料庫,不需要用到ADO+。


Q5.問:C#可不可以開發Windows程式?不會只能開發分散式應用吧?

答:當然可以!C#可以開發任何古典風格的Windows程式。不僅如此,不管是控制程式、圖形程式、NT服務程式,還是普通元件,甚至是頁面,除了程式,都可以用C#開發出來。實際上,這些功能都是從執行庫中實現的,而 C#語言本身並不提供。


Q6.問:C#和s之間是什麼關係?

答:WinForms是.NET類庫中的類集,其中封裝了類中的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支援/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圖片。限於篇幅,這裡就不再贅述了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10790690/viewspace-951263/,如需轉載,請註明出處,否則將追究法律責任。

相關文章