1. 程式人生 > >《隨筆八》——C#中的 “ 顯式轉換 和 隱式 轉換”

《隨筆八》——C#中的 “ 顯式轉換 和 隱式 轉換”

目錄

隱式轉換

顯式轉換

 


隱式轉換


●  即使兩個變數儲存的資訊相同,使用不同的型別解釋它們時,方式也是不同的。

● 注意: bool 和 string 沒有隱式轉換; char  儲存的是數值,所以 char 被當作數值型別。

●  這些型別的隱式轉換規則是: 任何型別A,只要其取值範圍完全包含在型別B的取值範圍內,就可以隱式轉換為型別B。

●  short 型別的變數可以儲存 -32768到32767 之間的整數,  而byte 可以儲存的最大值是 0到255, 所以如果把 short 轉換為 byte 就會出問題。 如果short型別的變數儲存的是256到32767之間的數, 相應數值就不能放在byte 中。

如果說short 型別變數中的儲存的數值小於255,short 就可以轉換byte , 但是需要顯式轉換。

 


顯式轉換


● 語法為:

(要轉換成的資料型別)表示式

注意: 這只是在特殊的情況下可行的,彼此之間幾乎沒有什麼關係的型別或根本沒有關係的型別不能進行強制換行。

short source = 7;
byte  temp = (byte)source ; // short 型別顯示轉換為byte 型別

●  關鍵字 checked 和 unchecked 可以檢查一個值放在一個變數中時, 如果該值過大, 就會導致溢位,這就需要檢查。

語法為:

checked(表示式);
unchecked(表示式);
static void Main(string[] args)
 {
          
      short sourceVar = 281;
      byte destinationVar = checked((byte)sourceVar);
      WriteLine($"{destinationVar}");
      WriteLine($"{sourceVar}");
 }

●  注意: 關鍵字unchecked 替代 checked ,就會得到以前同樣的結果,不會出現錯誤,與預設的做法相同。

 

●  注意:兩個 short 值相乘的結果並不會返回一個 short值, 因為這個操作的結果很可能大於 3267(這是short型別可以儲存的最大值), 操作的結果為int 值。