[C#] 隱含的轉換&明確轉換

在寫程式的時候,是否看過類似的畫面,卻不知道 "隱含轉換" 到底是甚麼呢?

 

 C# 在編譯時期是靜態型別,所以宣告變數之後,除非該型別隱含轉換為變數的型別,否則無法再次宣告或指派另一個型別的值。  By MSDN

簡單來說就是,你如果已經宣告好一個變數的資料型別,原則上就沒辦法指派其他的資料型別了。

double d1 = 6.0;
int i1 = 4;
d1 = i1;
i1 = d1;    //這行會報錯

 

可是偶爾還是有轉換型別的需求該怎麼辦呢?  那就可以用到 "資料型別轉換"。

然而資料型別轉換又分成兩種

  • 隱含轉換(自動轉換): 將比較小的資料型別轉成比較大的資料型別。 EX: int轉成double

    • 不會遇到太大的問題,就像上面的程式碼 d1 = i1;
      i1 會先轉成double 後再指定給d1。 (而且不用特別寫什麼,程式就會幫你自動轉換)

  • 明確轉換(強制轉換): 將比較大的資料型別轉成比較小的資料型別。 EX: double轉成int

    • 這時就會遇到問題了,你可以想像double(8Byte) 要變成 int (4Byte),那肯定會遇到問題
      就像上面的程式碼 i1 = d1;
      不過可以利用強制轉換來解決這樣的問題,只要改寫成  i1 = (int)d1;
      先強制將d1轉成int 後再指定給i1 就解決了