第三章 類型和變量

C# 有兩種類型:值類型和引用類型忿磅。
值類型的變量直接包含數(shù)據(jù)另患,而引用類型的變量則存儲對數(shù)據(jù)(稱為“對象”)的引用囊陡。
借助引用類型芳绩,兩個變量可以引用同一對象;因此撞反,對一個變量執(zhí)行的運算可能會影響另一個變量引用的對象妥色。 借助值類型,每個變量都有自己的數(shù)據(jù)副本遏片;因此嘹害,對一個變量執(zhí)行的運算不會影響另一個變量(ref 和 out 參數(shù)變量除外)。

C# 值類型又細分為簡單類型吮便、枚舉類型笔呀、結構類型和可以為 null 的值類型。

C# 引用類型又細分為類類型髓需、接口類型许师、數(shù)組類型和委托類型。

下面概述了 C# 的類型系統(tǒng)僚匆。

值類型

簡單類型

有符號的整型:sbyte微渠、short、int咧擂、long
無符號的整型:byte敛助、ushort、uint屋确、ulong
Unicode 字符:char
IEEE 浮點:float纳击、double
高精度小數(shù):decimal
布爾:bool

枚舉類型

格式為 enum E {...} 的用戶定義類型

結構類型

格式為 struct S {...} 的用戶定義類型

可以為 null 的值類型

值為 null 的其他所有值類型的擴展

引用類型

類類型

其他所有類型的最終基類:object
Unicode 字符串:string
格式為 class C {...} 的用戶定義類型

接口類型

格式為 interface I {...} 的用戶定義類型

數(shù)組類型

一維和多維,例如 int[] 和 int[,]

委托類型

格式為 delegate int D(...) 的用戶定義類型

八個整型類型支持帶符號或不帶符號格式的 8 位攻臀、16 位焕数、32 位和 64 位值。
兩個浮點類型(float 和 double)分別使用 32 位單精度和 64 位雙精度 IEC-60559 格式表示刨啸。
decimal 類型是適用于財務和貨幣計算的 128 位數(shù)據(jù)類型堡赔。

C# 的 bool 類型用于表示布爾值(true 或 false)。
C# 使用 Unicode 編碼處理字符和字符串设联。 char 類型表示 UTF-16 代碼單元善已,string 類型表示一系列 UTF-16 代碼單元灼捂。

下面總結了 C# 的數(shù)值類型。

有符號的整型

sbyte:8 位换团,介于 -128 到 127 之間
short:16 位悉稠,介于 -32,768 到 32,767 之間
int:32 位,介于 -2,147,483,648 到 2,147,483,647 之間
long:64 位艘包,介于 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 之間

無符號的整型

byte:8 位的猛,介于 0 到 255 之間
ushort:16 位,介于 0 到 65,535 之間
uint:32 位想虎,介于 0 到 4,294,967,295 之間
ulong:64 位卦尊,介于 0 到 18,446,744,073,709,551,615 之間

浮點

float:32 位,介于 1.5 × 10-45 到 3.4 × 1038 之間舌厨,7 位精度
double:64 位岂却,介于 5.0 × 10-324 到 1.7 × 10308 之間,15 位精度
Decimal
decimal:128 位裙椭,至少介于 -7.9 × 10-28 到 7.9 × 1028 之間淌友,至少為 28 位精度

C# 程序使用類型聲明創(chuàng)建新類型。 類型聲明指定新類型的名稱和成員骇陈。
用戶可定義以下五種 C# 類型:類類型、結構類型瑰抵、接口類型你雌、枚舉類型和委托類型。
class 類型定義包含數(shù)據(jù)成員(字段)和函數(shù)成員(方法二汛、屬性及其他)的數(shù)據(jù)結構婿崭。 類類型支持單一繼承和多形性,即派生類可以擴展和專門針對基類的機制肴颊。
struct 類型定義包含數(shù)據(jù)成員和函數(shù)成員的結構氓栈,這一點與類類型相似。 不過婿着,與類不同的是授瘦,結構是值類型,通常不需要進行堆分配竟宋。 結構類型不支持用戶指定的繼承提完,并且所有結構類型均隱式繼承自類型 object。
interface 類型將協(xié)定定義為一組已命名的公共函數(shù)成員丘侠。 實現(xiàn) interface 的 class 或 struct 必須提供接口函數(shù)成員的實現(xiàn)代碼徒欣。 interface 可以繼承自多個基接口,class 和 struct 可以實現(xiàn)多個接口蜗字。
delegate 類型表示引用包含特定參數(shù)列表和返回類型的方法打肝。 通過委托脂新,可以將方法視為可分配給變量并可作為參數(shù)傳遞的實體。 委托類同于函數(shù)式語言提供的函數(shù)類型粗梭。 委托也類似于其他一些語言中的函數(shù)指針概念争便,但與函數(shù)指針不同的是,委托不僅面向對象楼吃,還類型安全始花。
class、struct孩锡、interface 和 delegate 類型全部都支持泛型酷宵,因此可以使用其他類型對它們進行參數(shù)化。
enum 類型是一種包含已命名常量的獨特類型躬窜。 每個 enum 類型都有一個基礎類型(必須是八種整型類型之一)浇垦。 enum 類型的值集與基礎類型的值集相同。

C# 支持任意類型的一維和多維數(shù)組荣挨。

與上述類型不同男韧,數(shù)組類型無需先聲明即可使用。 相反默垄,數(shù)組類型是通過在類型名稱后面添加方括號構造而成此虑。
例如,
int[] 是 int 類型的一維數(shù)組口锭,
int[,] 是 int 類型的二維數(shù)組朦前,
int[][] 是由 int 類型的一維數(shù)組構成的一維數(shù)組。
可以為 null 的值類型也無需先聲明即可使用鹃操。 對于所有不可以為 null 的值類型 T韭寸,都有對應的可以為 null 的值類型 T?,后者可以包含附加值 null荆隘。 例如恩伺,int? 是可以包含任何 32 位整數(shù)或值 null 的類型。

C# 采用統(tǒng)一的類型系統(tǒng)椰拒,因此任意類型的值都可視為 object晶渠。

每種 C# 類型都直接或間接地派生自 object 類類型,而 object 是所有類型的最終基類燃观。 只需將值視為類型 object乱陡,即可將引用類型的值視為對象。 通過執(zhí)行裝箱和取消裝箱操作仪壮,可以將值類型的值視為對象憨颠。 在以下示例中,int 值被轉換成 object,然后又恢復成 int爽彤。

using System;
class BoxingExample
{
static void Main()
{
int i = 123;
object o = i; // Boxing
int j = (int)o; // Unboxing
}
}
當值類型的值轉換成 object 類型時养盗,將分配 object 實例(亦稱為“箱”)來包含值,然后該值會復制到相應的箱中适篙。 相反往核,當 object 引用被顯式轉換成值類型時,將檢查引用的 object 是否是具有正確值類型的箱嚷节;如果檢查成功聂儒,則會將箱中的值復制出來。
C# 的統(tǒng)一類型系統(tǒng)實際上意味著可以“按需”將值類型轉換成對象硫痰。 鑒于這種統(tǒng)一性衩婚,使用類型 object 的常規(guī)用途庫可以與引用類型和值類型結合使用。
C# 有多種變量效斑,其中包括字段非春、數(shù)組元素、局部變量和參數(shù)缓屠。 變量表示存儲位置奇昙,每個變量都具有一種類型,用于確定可以在變量中存儲哪些值敌完,如下文所述储耐。

不可以為 null 的值類型

具有精確類型的值

可以為 null 的值類型

null 值或具有精確類型的值

object

null 引用、對任意引用類型的對象的引用滨溉,或對任意值類型的裝箱值的引用

類類型

null 引用什湘、對類類型實例的引用,或對派生自類類型的類實例的引用

接口類型

null 引用业踏、對實現(xiàn)接口類型的類類型實例的引用,或對實現(xiàn)接口類型的值類型的裝箱值的引用

數(shù)組類型

null 引用涧卵、對數(shù)組類型實例的引用勤家,或對兼容的數(shù)組類型實例的引用

委托類型

null 引用或對兼容的委托類型實例的引用

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市柳恐,隨后出現(xiàn)的幾起案子伐脖,更是在濱河造成了極大的恐慌,老刑警劉巖乐设,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讼庇,死亡現(xiàn)場離奇詭異,居然都是意外死亡近尚,警方通過查閱死者的電腦和手機蠕啄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人歼跟,你說我怎么就攤上這事和媳。” “怎么了哈街?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵留瞳,是天一觀的道長。 經(jīng)常有香客問我骚秦,道長她倘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任作箍,我火速辦了婚禮硬梁,結果婚禮上,老公的妹妹穿的比我還像新娘蒙揣。我一直安慰自己靶溜,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布懒震。 她就那樣靜靜地躺著罩息,像睡著了一般。 火紅的嫁衣襯著肌膚如雪个扰。 梳的紋絲不亂的頭發(fā)上瓷炮,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音递宅,去河邊找鬼娘香。 笑死,一個胖子當著我的面吹牛办龄,可吹牛的內(nèi)容都是我干的烘绽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼俐填,長吁一口氣:“原來是場噩夢啊……” “哼安接!你這毒婦竟也來了?” 一聲冷哼從身側響起英融,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤盏檐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后驶悟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胡野,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年痕鳍,在試婚紗的時候發(fā)現(xiàn)自己被綠了硫豆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖够庙,靈堂內(nèi)的尸體忽然破棺而出恭应,到底是詐尸還是另有隱情,我是刑警寧澤耘眨,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布昼榛,位于F島的核電站,受9級特大地震影響剔难,放射性物質發(fā)生泄漏胆屿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一偶宫、第九天 我趴在偏房一處隱蔽的房頂上張望非迹。 院中可真熱鬧,春花似錦纯趋、人聲如沸憎兽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纯命。三九已至,卻和暖如春痹栖,著一層夾襖步出監(jiān)牢的瞬間亿汞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工揪阿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疗我,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓南捂,卻偏偏與公主長得像吴裤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子溺健,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎部分 基礎部分的順序:基本語法麦牺,類相關的語法,內(nèi)部類的語法矿瘦,繼承相關的語法枕面,異常的語法愿卒,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 一琼开、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,257評論 0 16
  • 哈哈哈易结,我終于成功啦! 我是一個科學家,喜歡做一些奇葩的東西如:自己有意識的鬧鐘搞动,一個巨大的合成器躏精,一個自己會記...
    zxc自行車閱讀 86評論 0 0
  • ? ??? 2015? 8? 9? ??? ??? ? ??? ????. ??? zabudong.com? ?...
    感恩修心閱讀 696評論 0 0
  • 你傻嗎 我傻 不然 聰明的人不會說自己 傻
    沫菀菀閱讀 114評論 0 0