官术网_书友最值得收藏!

2.1 數據類型

高級編程語言大多都有數據類型的概念,通過數據類型將數據進行不同的分類。這些分類中,有用于計算的正整數、整數、小數;有用來定義字母、符號的字符類型;有多個字符排在一起(如一句話)的字符串類型等。

數據類型的使用,規(guī)范了對數據的操作。如整數類型可以進行加、減、乘、除等數學運算,但字符類型不能執(zhí)行。

2.1.1 常用數據類型簡介

數據類型的表面含義是指數據屬于哪種類型,在實際操作中要根據數據特性以及范圍選擇一個適合的數據類型。

為充分合理地利用計算機資源,數據類型都有著固定的長度,在使用該類型的數據時,系統(tǒng)根據數據類型分配該數據所占用的空間。最常用的數據類型為基本數據類型。基本數據類型也叫簡單數據類型,其類型名稱及取值如表2-1所示。

表2-1 基本數據類型

表2-1中的數據類型為值類型,其中浮點型的精度實數包含3種特殊的值:Not a Number(NaN)、無窮大以及正零和負零。其說明如下所示:

NaN 也叫非數字值,它是由無效的浮點運算(如零除零)產生。

無窮大 包括正無窮大和負無窮大,由非零數字被零除這樣的運算產生。

正零和負零 一般情況下,它們與簡單的零相同,但某些運算中會區(qū)分。

注意

使用float類型聲明變量的值時,必須在數值后面添加后綴f;使用decimal類型聲明變量的值時,必須在數值后面添加后綴m(不區(qū)分大小寫),否則編譯會出錯。

每一種不同的數據類型都有不同的表示方式和應用,如一些數據類型需要使用引號,另一些數據類型需要使用大括號。常用的數據類型有整型、浮點型、字符型、字符串類型和數組類型等,其簡單介紹如下所示。

1. 整型

整型類型的數據相當于數學中的整數,但C#中的整型有著一定的范圍。最常用的整型是int型,數據值從-2147483648到2147483647之間的整數,超出這個范圍的整數若定義為int型,將引發(fā)錯誤。

整數類型常用的是整型(int型),而其他整數如長整型(long型)通常表示數值絕對值較大的數據,短整型(short型)表示絕對值相對較小的數據。

無符號的整型為非負數的整數,也分為長整數和短整數。

整型通常表示的是十進制數據。而計算機中,數據的存儲使用的是二進制數據,因此在一些情況下,需要有十進制、二進制、八進制和十六進制數據間的轉化。關于各進制數據之間的轉化在本章2.2.1節(jié)介紹。

2. 浮點型

浮點型通常用來表示帶小數點的數,根據其數據的精度分為單精度的float類型和雙精度的double類型。其用法與整型的用法一樣,表示數據的數值。

整型數據和浮點型數據均可參與數學邏輯運算,常用的運算有加法、減法、乘法、除法和取余運算等。

3. 字符型

字符型表示的是單個字符,需要注意的是,字符型數據需要使用單引號(‘’)引用,如小寫字母a,若用來表示字符,則需要寫作‘a’。單引號內只能有1個字符,否則將引發(fā)錯誤。

字符可以是字符集中任意字符,但數字被定義為字符型之后就不能參與數值運算。如‘5’與5是完全不同的概念:5可以參與數學邏輯運算,可以使用兩個5相加得到整型數據10;而‘5’只能被作為字符使用,不能參與邏輯運算。

另外,在C#中有一種特殊的字符,稱為轉義字符,通常在字符串中使用,表示特殊的輸出或顯示方式。

4. 數組

數組描述的是一組有著序號的數據。如抽獎游戲要抽出6個數字,這6個數字是有著順序,密切相關的,若使用6個單獨的數來表示,則無法表現(xiàn)其順序和相關性,而使用有著序號的數組來表示,既描述了數字的順序,又表現(xiàn)了其相關性。

數組有著下標(可理解為這組數據中,每個數據的編號),下標為從0開始的正整數,如數組名稱為num,則num[0]表示該數組中的第一個數據。

數組類型不在表2-1中,該類型屬于引用類型,對數組成員的訪問,其實質是通過下標記錄每個成員的存儲地址。

5. 字符串

字符串類型相當于字符(int型、char型、float型等)的數組,但它沒有明確的下標。字符串類型同樣不是值類型,對字符串的訪問與對數組的訪問一樣,但其用法相當于一個值類型數據。

字符串類型數據需要使用雙引號(“”)引用,如一個字符串內容為:歡迎光臨,則需要表示為“歡迎光臨”。字符串類型數據使用廣泛,可被作為類的對象來處理,其用法詳見本書第7章。

6. 轉義字符

轉義字符是被賦予特殊意義的特殊字符,轉義字符的使用通常不需要單引號,而是放在字符串內部使用。

使用轉義字符,可以表達換行、換頁和制表符等特殊含義,常見的轉義字符如表2-2所示。

表2-2 常用的轉義字符

在本書第1章曾介紹在控制臺輸出一條語句,其輸出的語句即為字符串類型的數據。將轉義字符放在字符串中輸出,可顯示轉義字符的作用和效果,如練習2-1所示。

【練習2-1】

輸出3個字符串,要求3個字符串的內容一樣,但第一個不包含轉義字符、第二個包含水平制表符、第三個包含換行符,代碼如下:

Console.WriteLine("上海廣州重慶");
Console.WriteLine("上海\t廣州\t重慶");
Console.WriteLine("上海\n廣州\n重慶");

上述代碼中,所有的漢字和轉義字符被放在雙引號內部,作為一個字符串被輸出。字符和文字在字符串內部不需要使用單引號引用。

按F5鍵運行該控制臺應用程序,其效果如圖2-1所示。3條輸出語句,除了轉義字符不同,其他相同。而轉義字符相關的字符,如反斜杠\和字符‘t’和字符‘n’,都沒有被輸出,而是輸出了水平間隔和換行。

圖2-1 轉義字符的使用

2.1.2 值類型

在C#中,常用的數據類型分為兩種:值類型,直接訪問數據的值;引用類型,訪問數據的存儲地址。在本節(jié)所講述的數據類型中,除了字符串和數組以外,都是值類型。

對數據的訪問分,并不是訪問直接給出的數據值,這種訪問直接使用數據值即可。而對大多訪問并不針對確定的值,而是針對一個變量或常量。

變量和常量相當于一個有著名稱的數據,對它們的訪問是根據它們的名稱來獲取其數據值。變量是數據值可以在程序中改變的,而常量是有著確定數據值的。

值類型直接訪問變量數據的值,如果向一個變量分配值類型,則該變量將被賦予全新的值副本。值類型通常創(chuàng)建在方法的棧上。

判斷一個類型是否屬于值類型,可以使用Type.IsValueType屬性。屬性是指類或對象的相關數據,如一個描述長方體的對象,則該對象可以有長、寬、高和面積等屬性。

有關類和對象的內容,將在本書的第5章和第6章詳細介紹。使用Type.IsValueType屬性判斷一個類型是否屬于值類型,語法如下:

TestType testType = new TestType();//TestType表示要測試的類型,如int、char
if (testType.GetType().IsValueType)
{
    Console.WriteLine("{0} is value type.",testType.ToString());
//輸出測試結果
}

C#中的值類型繼承自System.ValueType,主要包括基本數據類型、結構數據類型和枚舉數據類型。

1. 結構數據類型

結構類型不是單個數據的類型,而是多種數據和多種數據類型的組合。結構將相關聯(lián)的數據結合在一起,如一個結構名稱為學生,則該結構下可以有整型的變量學生編號以及浮點型的學生身高等數據,這些數據都是與學生相關的信息。

提示

有關結構的詳細內容,在本書第9章詳細介紹。

2. 枚舉數據類型

枚舉類型同樣不是單個數據的類型,但它與結構不同,枚舉類型中的所有數據,其數據類型是統(tǒng)一的。

枚舉類型是一種數據的列舉,如將一周的7天列舉出來,構成一個枚舉,方便程序的使用。通常可以使用枚舉的有:一年四季、12個月份、一個公司的部門和新聞類型等。

提示

有關枚舉的詳細內容,在本書第9章詳細介紹。

2.1.3 引用類型

引用類型直接操作的是數據的存儲位置,如果為某一個變量分配一個引用類型,則該變量將引用原始值,不會創(chuàng)建任何副本。

引用類型的創(chuàng)建一般在方法的堆上,C#中的引用類型均繼承自System.Object類,它主要包含類、接口、數組、字符串和委托。

□ 類是抽象的概念,確定對象擁有的特征(屬性)和行為(方法)。它可以包含字段、方法、索引器和構造函數等。

□ 接口是一種約束形式,它只包括成員的定義,而不包含成員實現(xiàn)的內容。接口的主要目的是為不相關的類提供通用的處理服務,由于C#中只允許樹形結構中的單繼承,即一個類只能繼承一個父類,所以接口是讓一個類具有兩個以上基類的唯一方式。

□ 數組元素是指將數組作為成員參數的元素,它在數組創(chuàng)建時開始存在,在沒有對該數組實例的引用時停止存在。

□ 字符串類型表示零或者更多Unicode字符組成的序列,它是一種不可變的特殊的引用類型。

□ 委托是一個類,它定義了方法的類型,使得方法可以當作另一個方法的參數來進行傳遞。

提示

盡管string是引用類型,但是使用比較運算符==或!=時則表示比較string對象,而不是引用的值。

雖然值類型和引用類型都可以用來存儲數據,但是它們之間也存在著許多不同點。如表2-3列出了它們的主要不同點。

表2-3 值類型和引用類型的不同點

一般來說,值類型(不支持多態(tài))適合存儲供C#應用程序操作的數據,而引用類型(支持多態(tài))應該用于定義應用程序的行為。

相關人員所創(chuàng)建的引用類型通常多于值類型,那么什么時候使用引用類型,什么時候使用值類型呢?如果以下問題都滿足條件則可以使用值類型:

□ 該類型的主要職責是用于數據存儲。

□ 該類型的公有接口完全由一些數據成員存取性定義。

□ 該類型永遠不可能有子類。

□ 該類型永遠不可能具有多態(tài)行為。

主站蜘蛛池模板: 吉木乃县| 杨浦区| 界首市| 义马市| 基隆市| 余江县| 涪陵区| 苍南县| 大足县| 泾川县| 苏尼特右旗| 休宁县| 四子王旗| 义乌市| 珲春市| 怀远县| 栖霞市| 三都| 民勤县| 五家渠市| 高雄市| 田阳县| 连城县| 中超| 台东县| 萨嘎县| 绍兴县| 梓潼县| 阜宁县| 永和县| 富源县| 金溪县| 古田县| 江陵县| 布拖县| 静宁县| 肇东市| 安福县| 新泰市| 定安县| 房山区|