2011-09-04 20 views

回答

9

如果所有.NET語言都編譯爲CIL,那麼這是否意味着它背後的語言(VB.NET,C#等)並不重要?

是的,這正是它的意思。無論您使用哪種語言,只要它符合CLS標準,CLR就不會在運行時關心MSIL。

不同的語言提供不同的語法,但在所有這些語法中,您應該能夠實現相同的最終目標。 C#和VB.NET是旗艦.NET語言,你可以期待微軟(和StackOverflow :-))提供的大部分功能,進展和支持。很顯然,每種語言都有自己的做事方式。

雖然有一個重要的事情要注意:有些功能是在MSIL中定義的,但尚未在C#/ VB.NET(還)中實現。例如,在MSIL中,您可以定義枚舉或委託通用約束,但不能使用高級語言。 Jon blogged關於這個有趣的功能。

至於你應該選擇哪一種,請確保你從不問這個問題,否則在關閉前1分鐘不可能存活。

+3

美味的MSIL早餐,午餐,晚餐和午夜小吃! –

+2

@安德魯理髮師,垃圾收集器晚餐後,所有的美味:-) –

+1

+1完美的答案!只是想拋出一個關於CLS合規性的鏈接:http://msdn.microsoft.com/en-us/library/bhc3fa7f%28v=VS.100%29.aspx(例如:無符號整數不保證在每一個工作.NET語言) – attack

1

從某種程度上說,這並不重要。編譯所有.Net語言的結果是CIL,您可以使用不同語言(大部分時間)使用其中一種語言創建的代碼。

儘管在某種程度上,不同的語言只有不同的語法,但並不完全正確。語法也很重要。例如,如果要編寫完全動態代碼,IronPython可能是比C#更好的選擇。如果你想編寫功能代碼,包括monad等更高級的功能,F#將比標準的程序.Net語言好得多。

7

那麼,有語言之間的顯着差異。特別是,我相信C++/CLI有一些C#/ VB不具備的技巧(例如,能夠直接修改「框」中的值),並且我不會感到驚訝,如果反過來也是如此。例如,不同的語言編譯器可能會利用IL的不同方面--F#編譯器將使用前綴爲tail.的前綴,例如C#編譯器不會。 (而且F#與C#,C++/CLI和VB顯然是完全不同的語言。)

但最終,JIT編譯器既不知道也不知道使用哪種源語言的情況。使用任何一種語言都可以使您的工作以最易讀和可維護的方式完成。這將取決於手頭的任務以及所涉及的開發團隊的經驗和偏好。有些語言比其他語言更適合某些任務。例如,在C#4之前,VB比C#更容易使用COM API,但是動態類型有助於在此平衡遊戲領域。因爲C#具有迭代器塊,所以C#會更適合實現LINQ to Objects ,而VB沒有任何可比的...但尚未在下一個版本中支持更好

0

是的,它可以很重要。

例如,Visual Basic在XBox或.NET Micro框架上不受支持。

我不確定,但我相信Windows Phone 7不支持C++ CLI。動態語言當然不是。 (例如使用DLR的任何東西)。

如果工具需要代碼生成,它通常會在C#之前出現在其他語言之前。有些語言從來沒有得到工具支持。

所以,雖然我認爲VB是C#的高級語言,但我通常會使用C#來完成我的製作工作。