iT邦幫忙

2

C#學習筆記3:資料型別、型別轉換

文中對於實質型別與參考型別的差異,借用了小山的YOUTUBE影片,他講得簡單易懂

資料型別

  • 數值型別(實質型別) Value Type:
    直接在已宣告變數的記憶體上儲存一個值。
    https://ithelp.ithome.com.tw/upload/images/20210410/20136522XMryUKvCgX.png

  • 參考型別 Referance Type:
    變數存放的是儲存資料所在的記憶體位置(在記憶體HEAP堆積區中)。
    https://ithelp.ithome.com.tw/upload/images/20210410/20136522HVVak9CRFx.png

記憶體HEAP堆積區存放的是不可預測的資料,就是在程式執行後,我才知道要使用多少記憶體。


基本資料型別

https://ithelp.ithome.com.tw/upload/images/20210410/20136522JZmrL7wJNE.png
本圖片參考(對不起,這張圖做得太好了,直接拿來用一下,謝謝C姐的製作)
邦友CynthiaChuang的文章圖片


資料溢位 overflow

當數值指定給某個變數時,若超出他所能儲存的容量,就會造成資料溢位,這時IDE就會提示錯誤。
例如sbyte只能存放 -128 ~ 127 ,如果放入128就會爆掉,就有點像小箱子裝不下太大的東西一樣。
https://ithelp.ithome.com.tw/upload/images/20210410/20136522LI0ZJgjM6Y.png


浮點數

  • float的部分要注意,把一個浮點數值指定給float型別時,必須在數值後加上"f"或是"F",或使用強制轉型,否則會出現錯誤,因為C#會將浮點數數值預設成double型別,因此要把double型別的數值指定給float型別的變數時,有可會發生overflo,所以要使用型別轉換
  • 想要儲存小數可以使用 float 或 double,一般使用可以儲存數字範圍較大的 double
float a;
a = 2.3f
a = (float)2.3;

布林值

  • 布林值只有兩種值true 、 false
  • 當需要表達的情形只有兩種狀態時(是與否、對與錯、要與不要),使用布林值來宣告變數最適合。
bool fg = true;

字串

字串是一種參考型別的資料型態,宣告時要用兩個雙引號包住

string str = "a"
string str1 = "Hello World!";
string str3 = "哈囉 您好";

逸出字元(Escape)
當我們的字串中要顯示一些已經被系統拿來用的符號時,就要使用逸出字元[ \ ],在要顯示的字元前加上 [ \ ],就會如實的顯示。

string str3 = "\"Mary\" 的脾氣很好!"; 這時候就會顯示"Marry" 的脾氣很好!

var

var又稱為隱含型別的變數,不用去明確指定變數型別,C#編譯器會去自動判斷要給予的型別

var i = 10; 判定i為整數型別
var k = 10.2; 判定k為浮點數型別
var skr = "你好!"; 判定skr為字串型別

使用var宣告有以下規範
1.必須指定初始值
2.不能指定函數的參數
3.可用來命名,但會失去宣告的功能
4.一個var一次只能宣告一個變數 (後面不能加[ , ]來宣告多個變數)


型別轉換

隱含轉型

  • 值域小的型別轉換值域大的型別會發生自動型別轉換 (把小箱子裝進大箱子裡的感覺)
  • '把值域大的轉成值域小的會發生錯誤 (把大箱子裝進小箱子會裝不下)
  • char、浮點數、decimal之間不存在隱含轉型
short a = 5;
int i, j = 123;

i = a; a會由short → int
s = j; j是int(值域大),s是short(值域小),會發生錯誤

強制轉型 (明確轉型)

變數運算過程中,因轉型而失去正確性,或編譯器無法成功隱含轉型,就要進行強制轉型

short s;
int j;
s = (short)j;
將j強制轉型成short型別

但強制轉行有時會一定會失去正確性

short s;
int j = 12345678;
s = (short)j; 
雖然轉型可以成功,但s的值卻不會是12345678,因為放下不,這時就失去正確性

轉型時要注意,轉型後是否為相似型別的值

string str1 = "123";
string str2 = "Hello";
int i, j;

i = (int)str1; 能成功將123指定給int型態的i
j = (int)str2; 字串Hello無法被轉換成任何的數值,會發生錯誤

* 強制轉型的其他方法

short s;
int j;
s = Conver.ToInt16(j);
將j強制轉型成short型別
short s;
int j;
s = j.ToInt16();
將j強制轉型成short型別

也可以使用ToChar、ToSingle、ToDouble、ToSbyte、ToInt32、ToInt64、ToUint32、ToUint16、ToString...等等


尚未有邦友留言

立即登入留言