書名: C# 2012程序設(shè)計實踐教程 (清華電腦學堂)作者名: 張冬旭本章字數(shù): 3517字更新時間: 2021-03-26 17:16:26
2.2 數(shù)據(jù)類型
高級編程語言大多都有數(shù)據(jù)類型的概念,通過數(shù)據(jù)類型將數(shù)據(jù)進行不同的分類。這些分類中,有用于計算的正整數(shù)、整數(shù)、小數(shù);有文本描述性質(zhì)的字符串、字符;還有將多個有著關(guān)聯(lián)的變量結(jié)合在一起的數(shù)組和集合等。
數(shù)據(jù)類型的使用,規(guī)范了對數(shù)據(jù)的操作。如整數(shù)類型可以進行加、減、乘、除等數(shù)學運算,但字符類型和數(shù)組類型不能直接進行運算。本節(jié)介紹C#中的數(shù)據(jù)類型。
2.2.1 常用數(shù)據(jù)類型
數(shù)據(jù)類型的表面含義是指數(shù)據(jù)屬于哪種類型,在實際操作中要根據(jù)數(shù)據(jù)特性以及范圍選擇一個適合的數(shù)據(jù)類型。
每一種不同的數(shù)據(jù)類型都有不同的表示方式和應用,如一些數(shù)據(jù)類型需要使用引號,另一些數(shù)據(jù)類型需要使用大括號。常用的數(shù)據(jù)類型有整型、浮點型、字符型、字符串類型、數(shù)組類型、類、接口和委托等,根據(jù)其用法的不同將數(shù)據(jù)類型分為值類型和引用類型,如下所示。
(1)值類型。值類型直接訪問變量數(shù)據(jù)的值,如果向一個變量分配值類型,則該變量將被賦予全新的值副本。值類型通常創(chuàng)建在方法的棧上。
(2)引用類型。引用類型直接操作的是數(shù)據(jù)的存儲位置,如果為某一個變量分配一個引用類型,則該變量將引用原始值,不會創(chuàng)建任何副本。引用類型的創(chuàng)建一般在方法的堆上,它主要包含類、接口、數(shù)組、字符串和委托。
對上述常用的數(shù)據(jù)類型介紹如下。
1.整型
整型類型的數(shù)據(jù)相當于數(shù)學中的整數(shù),但C#中的整型有著一定的范圍。最常用的整型是int型,數(shù)據(jù)值是從-2147483648到2147483647之間的整數(shù),除此之外還有短整型和長整型等,如表2-1所示。
表2-1 整型類型名稱及說明

整型通常表示的是十進制數(shù)據(jù)。而計算機中,數(shù)據(jù)的存儲使用的是二進制數(shù)據(jù),因此在一些情況下,需要有十進制、二進制、八進制和十六進制數(shù)據(jù)間的轉(zhuǎn)化。
2.浮點型
浮點型通常用來表示帶小數(shù)點的數(shù),其用法與整型的用法一樣。浮點數(shù)可根據(jù)數(shù)據(jù)的精度分為單精度的float類型和雙精度的double類型,如下所示。
(1)float表示占位32位的數(shù),其取值范圍在1.5×10-45~3.4×1038之間。
(2)double表示占位64位的數(shù),其取值范圍在5.0×10-324~1.7×10308之間。
整型數(shù)據(jù)和浮點型數(shù)據(jù)均可參與數(shù)學邏輯運算,常用的運算有加法、減法、乘法、除法和取余運算等。
3.字符型
字符型表示的是單個字符,需要注意的是:字符型數(shù)據(jù)需要使用單引號引用,如小寫字母a,若用來表示字符,則需要寫作'a',單引號內(nèi)只能有一個字符,否則將引發(fā)錯誤。
字符型使用char來表示,該類型占位16位,可以是字符集中的任意字符。但數(shù)字被定義為字符型之后就不能參與數(shù)值運算了。如'5'與5是完全不同的概念:5可以參與數(shù)學邏輯運算,可以使用兩個5相加得到整型數(shù)據(jù)10;而'5'只能被作為字符使用,不能參與邏輯運算。
4.數(shù)組
數(shù)組描述的是一組有著序號的數(shù)據(jù)。如一周的7天,這7天屬于7個不同的數(shù)據(jù),但它們又有著密切的聯(lián)系、有著固定的順序。C#使用數(shù)組來定義多個相關(guān)聯(lián)的數(shù)據(jù),并為這些數(shù)據(jù)定義下標,描述這些數(shù)據(jù)的順序。
下標可理解為這組數(shù)據(jù)中每個數(shù)據(jù)的編號,下標為從0開始的正整數(shù),如數(shù)組名稱為num,則num[0]表示該數(shù)組中的第一個數(shù)據(jù)。數(shù)組類型屬于引用類型,對數(shù)組成員的訪問,其實質(zhì)是通過下標記錄每個成員的存儲地址。
5.字符串
字符串類型相當于字符類型(int型、char型、float型等)的數(shù)組,但它沒有明確的下標。字符串類型同樣是引用類型,對字符串的訪問與對數(shù)組的訪問一樣,但其用法相當于一個值類型數(shù)據(jù)。
字符串類型數(shù)據(jù)需要使用雙引號引用,如一個字符串內(nèi)容為:歡迎光臨,則需要表示為“歡迎光臨”。字符串類型數(shù)據(jù)使用廣泛,可被作為類的對象來處理,其用法在本書后面的章節(jié)中介紹。
6.轉(zhuǎn)義字符
在C#中有一種特殊的字符,稱為轉(zhuǎn)義字符,通常在字符串中使用,表示特殊的輸出或顯示方式。
轉(zhuǎn)義字符是被賦予特殊意義的特殊字符,轉(zhuǎn)義字符的使用通常不需要單引號,而是放在字符串內(nèi)部使用。
使用轉(zhuǎn)義字符,可以表達換行、換頁和制表符等特殊含義,常見的轉(zhuǎn)義字符如表2-2所示。
表2-2 常用的轉(zhuǎn)義字符

在C#中有輸出語句可以在控制臺輸出一條語句,其輸出的語句即為字符串類型的數(shù)據(jù)。將轉(zhuǎn)義字符放在字符串中輸出,可顯示轉(zhuǎn)義字符的作用和效果。
7.結(jié)構(gòu)
結(jié)構(gòu)類型不是單個數(shù)據(jù)的類型,而是多種數(shù)據(jù)和多種數(shù)據(jù)類型的組合。結(jié)構(gòu)將相關(guān)聯(lián)的數(shù)據(jù)結(jié)合在一起,如一個結(jié)構(gòu)名稱為學生,則該結(jié)構(gòu)下可以有整型的變量學生編號,以及浮點型的學生身高等數(shù)據(jù),這些數(shù)據(jù)都是與學生相關(guān)的信息。
8.枚舉
枚舉類型同樣不是單個數(shù)據(jù)的類型,但它與結(jié)構(gòu)不同,枚舉類型中的所有數(shù)據(jù),其數(shù)據(jù)類型是統(tǒng)一的。
枚舉類型是一種數(shù)據(jù)的列舉,如商品的分類有多種,不同的人可能對同一種商品類型有不同的叫法(家電也可以叫作家用電器),此時只需讓權(quán)威人士將所有的商品類型列舉出來,由其他人從中選擇,即可統(tǒng)一商品的分類名稱,避免商品分類的混雜。
通??梢允褂妹杜e的數(shù)據(jù)有:一年四季、12個月份、一個公司的部門和新聞類型等。
9.其他數(shù)據(jù)類型
本節(jié)所介紹的數(shù)據(jù)類型還有類、接口和委托,這些數(shù)據(jù)類型將在本書后面的章節(jié)中詳細介紹,本節(jié)對其概括如下。
(1)類是抽象的概念,確定對象擁有的特征(屬性)和行為(方法)。它可以包含字段、方法、索引器和構(gòu)造方法等。
(2)接口是一種約束形式,它只包括成員的定義,而不包含成員實現(xiàn)的內(nèi)容。接口的主要目的是為不相關(guān)的類提供通用的處理服務,由于C#中只允許樹形結(jié)構(gòu)中的單繼承,即一個類只能繼承一個父類,所以接口是讓一個類具有兩個以上基類的唯一方式。
(3)委托是一個類,它定義了方法的類型,使得方法可以當作另一個方法的參數(shù)來進行傳遞。
2.2.2 數(shù)據(jù)格式
常用的數(shù)據(jù)格式有數(shù)據(jù)的進制和字符串的顯示格式。日常生活中的數(shù)據(jù)進制是十進制,即以10為基數(shù),超過10就進位。然而計算機中的數(shù)據(jù)是兩位的,即0和1,是二進制數(shù)據(jù)。
字符串通常是程序中的描述性文本,需要直接與用戶接觸,其顯示樣式?jīng)Q定了程序與用戶交互的質(zhì)量。C#中提供了多種方式來顯示字符串。本節(jié)介紹數(shù)據(jù)進制的字符串格式顯示。
1.數(shù)據(jù)進制
二進制數(shù)據(jù)由0和1這兩個數(shù)字構(gòu)成,十進制中的數(shù)字3被轉(zhuǎn)化成二進制表示為11,滿二進一。因此,十進制中的4等同于二進制中的100。
同樣道理,十六進制由16個數(shù)字構(gòu)成,滿十六進一。由于數(shù)字只有0~9這10個,不足以表示十六進制所需的16個,因此需要使用大寫字母A~F來表示。
表示十六進制的數(shù)字為:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。十六進制中的F相當于十進制中的15;十六進制10相當于十進制數(shù)字16。
對于十進制數(shù)據(jù),從低位到高位分別表示個、十、百、千等,依次表示為100、101、102、103;對于二進制數(shù)據(jù),從低位到高位依次為20、21、22、23和24等;十六進制數(shù)據(jù)從低位到高位依次為160、161、162、163等。
因此對于二進制數(shù)據(jù)11001來說,轉(zhuǎn)換為十進制數(shù)據(jù)為:1×1+0×2+0×4+1×8+1×16=25。十六進制數(shù)據(jù)AAA轉(zhuǎn)化為十進制為:10×1+10×16+10×256=2730。
2.字符串格式
對字符串格式的控制可以使用格式標識符、使用@符號或使用格式控制方法。在C#中,使用Console.WriteLine()方法和string.Format()方法都可以控制字符串的格式,不同的是:Console.WriteLine()方法是一個輸出方法,在控制字符串格式的同時,將字符串輸出;而string.Format()方法能夠?qū)⒏袷交蟮臄?shù)據(jù)放在變量中,隨時可以調(diào)用。
1)使用Console.WriteLine()方法及格式標識符
為了規(guī)范輸出數(shù)據(jù),Console.WriteLine()方法可直接對字符串的格式進行規(guī)范,其中一種規(guī)范格式如下所示:
Console.WriteLine("{0} {1}",參數(shù)1,參數(shù)2,…)
上述代碼中,{0}代表第一個參數(shù),{1}代表第二個參數(shù)。Console.WriteLine()方法可包含多個參數(shù),使用大括號和數(shù)字來表示。其內(nèi)部數(shù)字從0開始,相同的編號只能代表相同的參數(shù)。如輸出2+3的計算結(jié)果,可使用如下語句:
Console.WriteLine("2+3={0}",2+3);
上述代碼中,使用2+3的計算結(jié)果替代字符串中的“{0}”;輸出字符串“2+3=”和2+3的計算結(jié)果。在C#中有著可以直接使用的運算符,“+”運算符是其中的一種。程序設(shè)計語言中的運算符與數(shù)學中的運算符略有不同,將在2.5節(jié)介紹。
在C#中提供了格式標識符號,用來規(guī)范字符串的輸出格式。常見的格式標識符號如表2-3所示。
表2-3 格式標識符號及其含義

如分別使用逗號分隔符號和精度格式,輸出同一個數(shù)據(jù)01234,使用語句如下所示。
Console.WriteLine("{0:N1}", 01234); Console.WriteLine("{0:N2}", 01234); Console.WriteLine("{0:N3}", 01234); Console.WriteLine("{0:F1}", 01234); Console.WriteLine("{0}", "01234");
運行上述語句,其效果如下所示。若Console.WriteLine()方法中有兩個參數(shù),都需要雙精度表示,則可以使用“Console.WriteLine("{0:F2}{1:F2}", 1234, 5678);”語句。
1,234.0 1,234.00 1,234.000 1234.0 01234
在C#中,有Console.Write()方法,其用法與Console.WriteLine()方法只有一點不同:Console.WriteLine()方法在輸出的同時,在輸出內(nèi)容的末尾添加換行符,而Console.Write()方法只輸出指定的內(nèi)容,不對文字進行換行。
2)string.Format()方法
在C#中,有不需要輸出而只指定字符串格式的方法:string.Format()方法。該方法根據(jù)指定的格式,返回一個格式字符串,其格式的使用與Console.WriteLine()方法一樣。如同樣是2+3的計算結(jié)果,使用string.Format()方法語句如下。
string.Format ("2+3={0}",2+3);
輸出該字符串,語句如下。
Console.WriteLine(string.Format ("2+3={0}",2+3));
3)@的使用
在C#中,一些特殊符號被賦予了特殊的用法,但字符串中的特殊符號并不希望被用作特殊的用法,而是希望被作為普通字符輸出,此時可以使用@符號,將字符串原樣輸出。
- Visual FoxPro程序設(shè)計教程
- Rust編程從入門到實戰(zhàn)
- Python自動化運維快速入門
- Java程序設(shè)計與實踐教程(第2版)
- 微信小程序開發(fā)解析
- Building an RPG with Unity 2018
- Building Serverless Applications with Python
- 零基礎(chǔ)學Python網(wǎng)絡爬蟲案例實戰(zhàn)全流程詳解(入門與提高篇)
- Regression Analysis with Python
- 計算機應用基礎(chǔ)教程(Windows 7+Office 2010)
- R語言數(shù)據(jù)可視化:科技圖表繪制
- Flink技術(shù)內(nèi)幕:架構(gòu)設(shè)計與實現(xiàn)原理
- Python+Office:輕松實現(xiàn)Python辦公自動化
- Mapping with ArcGIS Pro
- HTML5+CSS3+jQuery Mobile+Bootstrap開發(fā)APP從入門到精通(視頻教學版)