實值型態共有 15 種,如下表
型態類型 | 關鍵字 | 位元數 | 範圍 |
---|---|---|---|
整數 | byte | 8 | 0 .. 255 |
整數 | sbyte | 8 | -128 .. 127 |
整數 | short | 16 | -32,768 .. 32,767 |
整數 | ushort | 16 | 0 .. 65,535 |
整數 | int | 32 | -2,147,483,648 .. 2,147,483,647 |
整數 | uint | 32 | 0 .. 4,294,967,295 |
整數 | long | 64 | -9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807 |
整數 | ulong | 64 | 0 .. 18,446,744,073,709,551,615 |
浮點數 | float | 32 | -3.402823e38 .. 3.402823e38 |
浮點數 | double | 64 | -1.79769313486232e308 .. 1.79769313486232e308 |
浮點數 | decimal | 128 | -79228162514264337593543950335 .. 79228162514264337593543950335 |
字元 | char | Unicode 字元 | |
布林 | bool | True 或 False | |
列舉 | enum | 須自行定義 | |
結構 | struct | 須自行定義 |
依資料所佔位元數的不同,整數有八種,浮點數有三種,另外布林、字元、列舉、結構各一種。一般來說,資料型態所佔據的位元數越多,可表示的數字範圍也越大。字面常數 (literal) 也就是程式中直接寫出來的數值 (value) ,以下表示布林值 (Boolean value) 、字元 (character) 、整數 (integer) 與浮點數 (floating-point number) 的字面常數
bool a = True; char b = '2'; int c = 2; double d = 2.0;
宣告 (declare) 布林型態的變數 (variable) 使用關鍵字 (keyword) bool , True 為布林值的字面常數,表示邏輯上的真,布林型態的另一個字面常數為 False ,表示邏輯上的假。
字元型態則使用關鍵字 char ,由於 C# 直接支援 Unicode 編碼,因此任何 Unicode 字元都可以當作字元型態的的字面常數。字元型態的字面常數為單引號圍起來的單一字元,或是單引號圍起來,反斜線加上四位的十六位元數字,例如
char e = '\u0061'; // 小寫英文字母 a char f = '\u0032'; // 阿拉伯數字 2 char g = '\u002E'; // 英文句點 . char h = '\u0025'; // 百分比符號 %
反斜線加上特定英文小寫字母表示跳脫字元,用來表示一些不可見字元,例如
char i = '\n'; // 新行符號 char j = '\t'; // tab 鍵 char k = '\a'; // 響鈴 char l = '\"'; // 雙引號
整數型態共有八種,一般來講,最常使用的是 int 型態,沒有特別指定的整數字面常數也會是 int 型態,而 long 型態又被稱為長整數,字面常數須加上英文字母 L 的字尾,如
long m = 220L; // 長整數 220
浮點數型態有三種,最常使用的是 double 型態,沒有特別指定的浮點數字面常數也會是 double 型態,若是需要使用 float 型態的浮點數,需要在字面常數加上 F 或 f 的字尾,如
float o = 22.0F; // 浮點數 22.0 float p = 22.0f; // 浮點數 22.0
decimal 具有較高的精確度和較小的範圍,需要在字面常數加上 M 或 m 的字尾
decimal q = 22.0M; // 浮點數 22.0 decimal r = 22.0m; // 浮點數 22.0
除了以上十五種實值型態之外,其餘的變數都是指向物件的參考,可以想像變數本身就是容器,實值型態所含的數值大小可以直接裝進變數之中,或佔據記憶體空間較小,但是物件太大,塞不進變數裡頭,因此物件變數裡所裝的是對物件的連結,也就是參考。
例如 demo.cs 中
// 宣告類別名稱 class Demo { // 宣告 Main() 方法 static void Main() { // 建立 object 型態的物件 object o = new object(); // 於命令列印出訊息 System.Console.WriteLine(); System.Console.WriteLine(o.ToString()); System.Console.WriteLine("↑↑ 上面是 Object 的字串形式"); System.Console.WriteLine(); System.Console.WriteLine("程式執行結束 ...."); System.Console.WriteLine(); } } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:demo.cs 功能:示範 C# 程式 作者:張凱慶 時間:西元 2012 年 10 月 */
第 6 行,變數 o 為對 object 型態物件的參考
object o = new object();
建立物件須使用關鍵字 new ,以及物件的建構子 (constructor) 。建構子類似物件的方法 (method) ,用來專門建立物件之用。一旦物件建立之後,物件就會包含許多屬性 (field) 與方法。
object 為 Object 型態的別名, object 亦為關鍵字之一。 Object 型態的物件為 C# 所有物件之母,這是說, C# 中所有物件都繼承 (inherit) 自 Object 。繼承 (inheritance) 是物件導向程式語言 (object-oriented progamming language) 中的一項重要特性,使類別 (class) 可以衍生自其他類別,子類別 (subclass) 可以擁有父類別 (superclass) 的特性。
「繼承」是程式語言社群習慣用詞,英文動詞原文為 inherit ,意思泛指從什麼得到什麼,所以生物學中的「遺傳」也是用這個詞。實際上物件導向程式設計的繼承機制相當複雜,然而中文的繼承常用於某物不再,另物將起的意思,譬如我繼承某某的精神,雖然某某不見得已死,可是將來要付出努力的卻是我而非某某,因而這裡的意思中文用「遺傳」比較恰當,子代會從親代遺傳性狀,子代與親代也會並存一段時間,這就沒有某物不再的意含了。
由於 Object 型態為物件之母,因此 Object 型態的方法,也都會被 C# 中所有物件所繼承。以下為 Object 的 public 方法
名稱 | 功能 |
---|---|
Equals | 判斷兩個 Object 是否相等 |
Finalize | 垃圾收集前釋放資源 |
GetHashCode | 特定型態的雜湊函數 |
GetType | 取得型態 |
MemberwiseClone | 建立淺層副本 |
ReferenceEquals | 判斷指定的 Object 是否為相同的 Object |
ToString | 回傳字串形式 |
有沒有看到,光是 Object 裡頭就有這麼多東東,所以變數裝的下對物件的參考,裝不了整個物件 :)
有一個特別的字面常數 null ,一旦物件的參考變數指向 null ,就表示該物件失去這個參考變數,如果沒有其他的變數指向這個物件,這個物件就會被資源回收者 (garbage collector) 進行資源回收,好挪出記憶體空間,給其他程式利用。
有一個特別的物件,說是特別其實也是太常使用了,就是字串 (string) , string 同時也是關鍵字之一。程式中經常處理大量的字串工作,因此字串有專門的字面常數表示方法,也就是用雙引號圍起來的內容就是字串,例如
string s = "There is no spoon."; // 英文句子的字串 string t = "偷得浮生半日閒"; // 中文句子的字串
demo.cs 中的 o.ToString() ,就是回傳 o 的字串表達形式,也就是一個字串物件。
接下來,我們來詳細看看類別的定義吧!
中英文術語對照 | |
---|---|
實值型態 | value type |
物件 | object |
參考 | reference |
字面常數 | literal |
數值 | value |
布林值 | Boolean value |
字元 | character |
整數 | integer |
浮點數 | floating-point number |
宣告 | declare |
變數 | variable |
關鍵字 | keyword |
建構子 | constructor |
方法 | method |
屬性 | field |
繼承 | inherit |
繼承 | inheritance |
物件導向程式語言 | object-oriented progamming language |
類別 | class |
子類別 | subclass |
父類別 | superclass |
資源回收者 | garbage collector |
字串 | string |
您可以繼續參考
基礎篇
相關目錄
回 C# 入門指南
回 C# 教材
回首頁
參考資料
http://msdn.microsoft.com/zh-tw/library/wew5ytx4%28v=vs.90%29.aspx
http://msdn.microsoft.com/zh-tw/library/cs7y5x0x%28v=vs.90%29.aspx
http://msdn.microsoft.com/zh-tw/library/4d43ts61%28v=vs.90%29.aspx
http://msdn.microsoft.com/zh-tw/library/ya5y69ds%28v=vs.90%29.aspx
http://msdn.microsoft.com/zh-tw/library/bfft1t3c%28v=vs.90%29.aspx
http://msdn.microsoft.com/zh-tw/library/s1ax56ch%28v=vs.90%29.aspx
http://msdn.microsoft.com/zh-tw/library/ms173104%28v=vs.90%29.aspx
http://msdn.microsoft.com/zh-tw/library/9kkx3h3c%28v=vs.90%29.aspx
http://msdn.microsoft.com/zh-tw/library/362314fe%28v=vs.90%29.aspx
沒有留言:
張貼留言