引言:
C# 2.0 中還引入了可空類型,可空類型也是值類型,只是可空類型是包括null的值類型的,下面就介紹下C#2.0中對可空類型的支持具體有哪些內容(最近一直都在思考如何來分享這篇文章的,因為剛開始覺得可空類型使用過程中比較簡單,覺得沒有講的必要,但是考慮到這個系列的完整性,決定還是嘮叨下吧,希望對一些不熟悉的人有幫助)。
一、為什么會有可空類型
如果朋友們看了我之前的分享,對于這一部分都不會陌生,因為我一般介紹C#特性經常會以這樣的方式開頭的, 因為每個特性都是有它出現的原因的(有一句佛語這是這么講的:萬事皆有因,有因必有果),首先來說說這個因的(果當然是新增加了可空類型這個新特性了。),當我們在設計數據庫的時候,我們可以設置數據庫字段允許為null值,如果數據庫字段是日期等這樣在C#語言是值類型時,當我們把數據庫表映射一個對象時,此時Datetime類型在C# 語言中是不能為null的,如果這樣就會與數據庫的設計有所沖突,這樣開發人員就會有這樣的需求了――值類型能不能也為可空類型的?同時微軟也看出了用戶有這樣的需求,所以微軟在C# 2.0中就新增加了一種類型――可空類型,即包含null值的值類型,這個也就是我理解的因了,介紹完因之后,當然就是好好嘮叨下可空類型是個什么東西的了?
二、可空類型的介紹
可空類型也是值類型,只是它是包含null的一個值類型。我們可以像下面這樣表示可空類型(相信大家都不陌生):
上面代碼 int? 就是可空的int類型(有人可能會這樣的疑問的, 如果在C#1中我硬要讓一個值類型為一個可空類型怎么辦到呢?當然這個在C#1之前也是有可以辦到的,只是會相當麻煩,對于這個如果有興趣的朋友可以去刨下根),然而其實 "?"這個修飾符只是C#提供的一個語法糖(所謂語法糖,就是C#提供的一種方便的形式,其實肯定沒有int? 這個類型,這個int?編譯器認為的就是Nullable<int>類型,即可空類型),其實真真C# 2.0提供的可空類型是――Nullable<T>(這個T就是上專題介紹的泛型參數,其中T只能為值類型,因為從可空類型的定義為:public struct Nullable<T> where T : struct)和Nullable。下面給出一段代碼來介紹可空類型的使用:
輸出結果:
上面的演示代碼中都注釋,這里就不再解釋了,為了讓大家明白進一步理解可空類型是值類型,下面貼出中間語言代碼截圖:
三、空合并操作符(?? 操作符)
??操作符也就是"空合并操作符",它代表的意思是兩個操作數,如果左邊的數不為null時,就返回左邊的數,如果左邊的數為null,就返回右邊的數,這個操作符可以用于可空類型,也可以用于引用類型,但是不能用于值類型(之所以不能應用值類型(這里除了可空類型),因為??運算符要對左邊的數與null進行比較,然而值類型,不能與null類型比較,所以就不支持??運算符),下面用一個例子來掩飾下??運算符的使用(??這個運算符可以方便我們設置默認值,可以避免在代碼中寫if, else語句,簡單代碼數量,從而有利于閱讀。)
四、可空類型的裝箱和拆箱
值類型存在裝箱和拆箱的過程,可空類型也屬于值類型,從而也有裝箱和拆箱的過程的, 這里先介紹下裝箱和拆箱的概念的, 裝箱指的的從值類型到引用類型的過程,拆箱當然也就是裝箱的反過程,即從引用類型到值類型的過程(這里進一步解釋下我理解的裝箱和拆箱,首先.Net中值類型是分配在堆棧上的,然而引用類型分配在托管堆上,裝箱過程就是把值類型的值從推棧上拷貝到托管堆上,然后推棧上存儲的是對托管堆上拷貝值的引用,然而拆箱就是把托管堆上的值拷貝到堆棧上.簡單一句話概況,裝箱和拆箱就是一個值的拷貝的一個過程,就想搬家一樣,把東西從一個地方搬到另一個地方,對于深入的理解,大家可以參考下園中的博文.), 括號中是我理解的裝箱和拆箱的過程,下面就具體介紹下可空類型的裝箱和拆箱的:
當把一個可空類型賦給一個引用類型變量時,此時CLR 會對可空類型(Nullable<T>)對象進行裝箱處理,首先CLR會檢測可空類型是否為null,如果為null,CLR則不進行實際的裝箱操作(因為null可以直接賦給一個引用類型變量),如果不為null,CLR會從可空類型對象中獲取值,并對該值進行裝箱(這個過程就是值類型的裝箱過程了。),當把一個已裝箱的值類型賦給一個可空類型變量時,此時CLR會對已裝箱的值類型進行拆箱處理,如果已裝箱值類型的引用為null,此時CLR會把可空類型設為null(如果覺得 主站蜘蛛池模板: 久久综合艹| 欧美日韩免费一区 | 午夜小电影| 热99re久久免费视精品频软件 | 杏美月av | h视频在线播放 | 亚洲综合视频在线播放 | 国产一精品久久99无吗一高潮 | 中国7777高潮网站 | 久色网站 | 91豆奶 | 一级电影免费在线观看 | 午夜影院在线免费观看 | 成年人在线视频免费 | 欧美成人做爰高潮片免费视频 | 久久精品亚洲欧美日韩精品中文字幕 | 国产成人综合在线视频 | 免费永久在线观看黄网 | 国产成人高潮免费观看精品 | 久国产 | 日韩视频在线观看免费 | 羞羞答答xxdd在线播放 | 91精品国产福利尤物免费 | 狠狠干精品视频 | 国产一区网址 | 本色视频aaaaaa一级网站 | 在线播放污 | 毛片网站视频 | 日本欧美一区二区三区视频麻豆 | 久久久久久免费 | 毛片免费视频在线观看 | 国产精品成人亚洲一区二区 | 色网站免费观看 | 深夜小视频在线观看 | 毛片免费大全短视频 | 在线看一区二区三区 | 亚洲国产高清视频 | av日韩一区二区三区 | 亚洲成年人免费网站 | 成年毛片 | 亚洲午夜精品视频 |