實值型別
在前面一章中我們學習了一個簡單的C#程式的主要構成,下面我們就來系統的學習的C#基礎文法,首先學習的是資料類型中的實值型別和參考型別,以及常變數。
實值型別可以歸類如下:簡單類型,結構類型,枚舉類型。它們是從類 System.ValueType 中派生的。
簡單類型包括 整型(Intergral types)、小數型(Decimal types)、浮點型(Floating point types)、布爾型(Bool types)、字元型(Char types)。其中整型資料包含 int、 sbyte、 short、 ushort、 uint、 long、 ulong、 byte、char。
結構類型(struct)可以聲明建構函式、常數、欄位、屬性、方法、索引、操作符和巢狀型別,我們將會在結構一章中具體來講。
枚舉類型(enum)是由一指定常量集合組成的獨特的類型,我們也會在後面枚舉一章中介紹。
比如 int、char、float,它們分別儲存數字、字母、浮點數。當您聲明一個 int 類型時,系統分配記憶體來儲存值。
定義實值型別的標識符還有bool, byte, decimal, double, long, sbyte, short, uint,ulong,ushort。
我們想定義一個 int,char類型的變數並給它們賦值:
int a=5; //定義一個int型變數並初始化;
char c='2'; //定義一個char型變數並初始化;
參考型別
參考型別不包含儲存在變數中的實際資料,但它們包含對變數的引用。換句話說,它們指的是一個記憶體位置。使用多個變數時,參考型別可以指向一個記憶體位置。如果記憶體位置的資料是由一個變數改變的,其他變數會自動反映這種值的變化。內建的 參考型別有:object、dynamic 和 string。
對象(Object)類型 是 C# 一般型別系統(Common Type System - CTS)中所有資料類型的終極基類。Object 是 System.Object 類的別名。所以對象(Object)類型可以被分配任何其他類型的值。但是,在分配值之前,需要先進行類型轉換。
當一個實值型別轉換為物件類型時,則被稱為 裝箱;另一方面,當一個物件類型轉換為實值型別時,則被稱為 拆箱。
object obj;
obj = 100; // 這是裝箱
動態(Dynamic)類型可以儲存任何類型的值,其定義方式為:dynamic = value; 例如下面代碼:
dynamic d = 20;
字串(String)類型 允許您給變數分配任何字串值。字串(string)類型是 System.String 類的別名。它是從對象(Object)類型派生的。字串(String)類型的值可以通過兩種形式進行分配:引號和 @引號。
C# string 字串的前面可以加 @(稱作"逐字字串")將逸出字元(\)當作一般字元對待,比如:
string str = @"C:\Windows";
等價於:
string str = "C:\\Windows";
@字串中可以任意換行,分行符號及縮排空格都計算在字串長度之內。
string str = @"<script type="text/javascript">
<!--
-->
</script>";
關於string我們後面還會具體介紹。
常量
常量就是其值固定不變的量。從資料類型角度看,常量的類型可以是任何一種實值型別或參考型別。
一個常量的聲明就是聲明程式中要用到的常量的名稱和它的值。和變數一樣,我們可以同時聲明一個或多個給定類型的常量,常量的聲明格式如下。
constant-modifier const type constant-declarators;
其中,常量修飾符 constant-modifier 可以是這些:new、public、protected、internal、private。const是關鍵字,type可以是byte、short、int、uint、ulong、long、char …… 以及枚舉類型或參考型別。
public const int MaxValue = 10
整數常量可以是十進位、八進位或十六進位的常量。首碼指定基數:0x 或 0X 表示十六進位,0 表示八進位,沒有首碼則表示十進位。
一個浮點常量是由整數部分、小數點、小數部分和指數部分組成。您可以使用小數形式或者指數形式來表示浮點常量。
字元常量是括在單引號裡,例如,'x',且可儲存在一個簡單的字元類型變數中。一個字元常量可以是一個一般字元(例如 'x')、一個逸出序列(例如 '\t')或者一個通用字元(例如 '\u02C0')。
字串常量是括在雙引號 "" 裡,或者是括在 @"" 裡。
212 /* 合法 */
0xFeeL /* 合法 */
85 /* 十進位 */
0213 /* 八進位 */
0x4b /* 十六進位 */
30 /* int */
30u /* 無符號 int */
30l /* long */
30ul /* 無符號 long */
3.14159 /* 合法 */
314159E-5L /* 合法 */
\\ \ 字元
\' ' 字元
\" " 字元
\? ? 字元
"hello" hello字串
變數
一個變數只不過是一個供程式操作的儲存區的名字。在 C# 中,每個變數都有一個特定的類型,類型決定了變數的記憶體大小和布局。 如何定義變數呢?定義格式如下
data_type variable_list;
在這裡,data_type 必須是一個有效 C# 資料類型,可以是 char、int、float、double 或其他使用者自訂的資料類型。variable_list 可以由一個或多個用逗號分隔的標識符名稱組成。
變數可以在聲明時被初始化(指定一個初始值)。初始化由一個等號後跟一個常量運算式組成。
int d = 3, f = 5; /* 定義初始化 d 和 f */
byte z = 22; /* 定義初始化 z */
double pi = 3.14159; /* 定義聲明 pi 的近似值 */
char x = 'x'; /* 定義變數 x 的值為 'x' */
類型轉換
在 C# 中,類型轉換有兩種形式:
隱式類型轉換 ——這些轉換是 C# 預設的以安全方式進行的轉換。例如,從小的整數類型轉換為大的整數類型,從衍生類別轉換為基類。
顯式類型轉換 ——這些轉換是通過使用者使用預定義的函數顯式完成的。顯式轉換需要強制轉換運算子。
強制轉換的文法為: (data_type)variable; 其中括弧不可以省略,data_type為要轉換的類型說明符,variable為要轉換的變數。
double d = 5673.74;
int i;
i = (int)d; // 強制轉換 double 為 int
執行結果為5673。