[新手點滴] C# vs VB.NET 哪個好?

來源:互聯網
上載者:User
可能剛學.net的人在面臨選擇哪種語言的時候,經常會問的一個問題就是C#和VB.NET哪個更好?哪個速度快?

其實從本質而言,.net支援的任何程式設計語言最終都是翻譯成IL代碼,它們的啟動並執行機制都是一樣的。這樣看起來似乎.net framework上啟動並執行所有語言之間除了文法似乎就沒有什麼區別了,其實不然。其實每種語言都額外提供了自己的特性,或者有某些限制。而且不同的編譯器實現也會帶來差異。

今天在看書(Professional C# 中文版)的時候看到關於C#和VB.NET編譯器上的一個小區別:

同樣是+操作運算子,C#會翻譯成IL的add指令:

      public new int Add(int val1, int val2)

      {

         return val1 + val2;

      }

而VB.NET翻譯成add.ovf指令。
   Public Shadows Function Add(ByVal val1 As Integer, ByVal val2 As Integer) As Integer

      Return val1 + val2

   End Function



那麼add指令和add.ovf指令的區別在什麼地方呢。我查了一下MSDN:

add.vof : Adds two unsigned integer values, performs an overflow check, and pushes the result onto the evaluation stack.

OverflowException is thrown if the result is not represented in the result type.

區別主要是後者會產生更多的機器碼來執行溢出檢查,並且如果溢出會拋出OverflowException。這樣壞處很明顯,就是執行速度變慢,但是好處也有,就是代碼比較安全:)

因此,某些代碼C#編譯器在產生IL的時候產生的指令會比較運行得比較快,而VB.NET編譯器產生的IL代碼比較安全。各有優缺點:)

其實是否進行Overflow的檢查都是可以進行配置的(上面的只是C#和VB.NET的預設設定),在Project的Properties對話方塊中設定:

 

或者通過編譯器的 /checked[+ | -] 選項也可以指定是否檢查數值溢出。

另外C#還可以通過checkedunchecked關鍵字來指定是否檢查數值溢出,例如

z =  checked((short)(x + y));

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.