16.switch語句
C#中的switch語句可以使用整型、字符、枚舉或(不象C++或Java)字符串。在Java和C++中,如果你在任何一個case語句裡忽略了一個break語句,你就有其它case語句被執行的危險。我想不通為什麼這個很少需要的並容易出錯的行為在Java和C++中都成了缺省行為,我也很高興地看到C#不會是這個樣子。
【譯注: 因為C#不支持從一個case標簽貫穿到另一個case標簽。如果需要的話,可以使用goto case或goto default實現】
17.預定義類型
C#基本類型基本上和Java的差不多,除了前者還加入了無符號的類型。C#中有sbyte、byte、short、ushort、int、uint、long、ulong、char、float和double。唯一令人感到驚奇的地方是這兒有一個16個字節【譯注:原文誤寫為12個字節】的浮點型數值類型decimal,它可以充分利用最新的處理器。
【譯注:補充一下,盡管decimal占用128位,但它的取值范圍比float(32位)、Double(64位)遠遠小得多,但它的精度比後二者的要高得多,可以滿足精度要求極高的財務計算等】
18.字段修飾符
C#中字段修飾符基本上Java相同。為了表示不可被修改的字段,C#使用const和readonly修飾符。const字段修飾符就象Java的final字段修飾符,該字段的實際值被編譯成IL代碼的一部分。只讀字段在運行時計算值。對標准C#庫來說,這就可以在不會破壞你的已經部署的代碼的前提下升級。
19.跳轉語句
這兒沒有更多的令人驚訝的地方,可能除了臭名卓著的goto語句。然而,這和我們記得的帶來麻煩的20年前的basic的goto語句大不相同。一個goto語句必須指向一個標簽【譯注:goto語句必須必須在該標簽的作用域內,或者換句話說,只允許使用goto語句將控制權傳遞出一個嵌套的作用域,而不能將控制權傳遞進一個嵌套域】或是switch語句裡的一個選擇支【譯注:即所謂的goto case語句】。指向標簽的用法和continue差不多。Java裡的標簽,自由度大一些【譯注:Java中的break和continue語句後可跟標簽】。C#中,goto語句可以指向其作用域的任意一個地方,這個作用域是指同一個方法或finally程序塊【譯注:如果goto語句出現在finally語句塊內,則goto語句的目的地也必須在同一個finally語句塊內】。C#中的continue語句和Java中的基本等價,但C#中不可以指向一個標簽。
【譯注:Java把goto作為保留字,但並未實現它】