iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
1
Modern Web

C#與ASP.Net入門-我要成為工程師!!系列 第 6

Day06-C#變數與變數宣告、常數與常數宣告、var、型別轉換

第二篇介紹中有提到,C#是一個強型別語言,變數要使用必須先進行型別宣告。電腦根據宣告的型別會給予該變數相對應的記憶體大小以及允許其作的運算,如數字可以加減乘除、布林只能表示真假...等。既然要進行宣告,那我們就必須要了解有哪些型別囉!

實質型別 VS 參考型別

  • 實質型別(Value Type):
    變數的記憶體空間存放的是實際的值。如 int x=5,x的內容就是5。
    實質型別有:簡單型別(帶/不帶正負號的整數、浮點數、字元、布林值)、列舉型別、結構型別、可為Null的實質型別。

  • 參考型別(Reference Type):
    變數的記憶體空間存放的是值的記憶體位置,也就是放值的記憶體第一個開頭的地方。如int[] A = new int[] {1,4,2}。A存的就是[1,4,2]的記憶體位置。當要讀取4的時候,就是讀取A[1]→A記憶體位置的第二個值。
    註:陣列的第一個位置編號從0開始
    參考型別有:類別(物件、字串、自訂類別)、介面型別、陣列、委派型別。

C#基本資料型別

以下是C#基本資料型別,橘色的是比較常使用到的。
https://ithelp.ithome.com.tw/upload/images/20190905/20120055zm3ghutoCA.png

  • 整數就整數分這麼多幹嘛?主要是考量記憶體的使用。
  • 物件導向設計裡,萬物都是物件,物件在宣告時都需要使用new的方式給他一個新的記憶體空間。但值類型的基本型別(object除外),宣告都不需要使用new。

變數與變數宣告

  • 變數定義:用來表示值的名稱。顧名思義,存在變數裡的值是可以被改變的。
  • 宣告方式:資料型別 變數名稱 = 內容。注意,程式語言裡的等號不是等於的概念,而是把等號右邊賦值給左邊的概念。a = b → 賦予a一個b的值,或者是說,把b存進a裡。
  • 類別、結構、靜態變數、陳列元素中的變數宣告時若無指派初值,會自動給予初始值
  • 數字型別初始值為0
  • 參考型別初始值為null
  • 布林預設值為false
  • 宣告在方法中的變數若無指派初始值則會產生編譯錯誤
    如:
int a;//宣告a是一個可以存整數的變數
int a = 1;//宣告a是一個整數,且賦值1給a
char sex='F';//字元宣告用單引號
string apple="好吃";//字串宣告用雙引號

int a,b,c;//可以一次宣告多個同型別的變數
int a,b=0,c=1;//也可以同時賦值

常數與常數宣告

  • 常數定義:一經宣告就不會變動的值,一開始必須給定初始值。通常用在不會變動的東西例如 圓周率 pi= 3.14
  • 宣告方式:const 資料型別 變數名稱 = 內容
    如:
const double Pi = 3.14;

var

使用var宣告的變數,會自動判斷資料型別。
如:

var a=1;//自動將a定義為int
var b="hello";//自動將b定義為string

考量程式碼可讀性,若是已經很確定型別,或是對值的正確性很敏感的話,不宜使用var。

感謝下方留言studyazure大大的補充,更多var介紹請看:
var用法介紹文章
[.NET]快快樂樂學LINQ系列前哨戰-var與匿名型別

型別轉換

宣告為某種型別的變數,只能存該型別的資料,否則則要進行型別轉換。

型別轉換方式有2種:

  • 自動型別轉換:從小位元數型別轉成大位元數型別。
    • 1.1+8。1.1(double,8位元),8(int,4位元),所以運算時會自動轉換為double型別,變成1.1+8.0=9.1。
    • double a = 2; 2=int=4位元小於a(8位元),所以2會轉成2.0賦值給a
    • int b = 1.0; 1.0(8位元)>int(4位元),不符合此型別資料,故此行寫法為錯誤。
  • 強制型別轉換:
    • = 後加 (欲轉換型別)
    int b= (int)1.0;//把1.0強制轉成int
    
    • Convert用法
     string a = "1234";
     int b = Convert.ToInt32(a);//把a這個字串轉成int
    
     string c = "2019/09/05";
     DateTime d = Convert.ToDateTime(c);//把c這個字串轉成時間物件
    
    • Parse用法
     string a = "1234";
     int b = int.Parse(a);//把a這個字串轉成int
    
    • ToString()、ToDouble()...等
     DateTime z = new DateTime(2019,9,5);
     string y = z.ToString();//把DateTime形式轉成字串
    

懂得什麼是變數、常數以及如何宣告。恭喜你!你已經開啟寫程式碼的第一步了!

參考資料

MSDN-型別與變數
浮點數不只是你想像的小數點
預設值表 (C# 參考)
C#的資料型別及資料型別轉換


上一篇
Day05-C#撰寫規則與命名限制+(補充#region與#endregion用法)
下一篇
Day07-C#字串與跳脫字元(Escape Character/逸出字元)
系列文
C#與ASP.Net入門-我要成為工程師!!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
小朱
iT邦新手 4 級 ‧ 2019-09-13 17:30:01

var不是不能用,只要有良好的團隊規範,它可是個挺好用的東西。
不妨參考:https://dotblogs.com.tw/regionbbs/2017/11/03/csharp_explicit_type_vs_implicit_type

長知識!感謝大大補充!

我要留言

立即登入留言