日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

review——C# (15)转换

發(fā)布時間:2024/10/12 C# 115 豆豆
生活随笔 收集整理的這篇文章主要介紹了 review——C# (15)转换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

FROM P286

1.數(shù)字的轉(zhuǎn)換

1.1溢出檢測上下文

顯示轉(zhuǎn)換可能會丟失數(shù)據(jù)并且不能在目標類型中同等地表示源值。對于整數(shù)類型,C#給我們提供了選擇運行時是否應該在進行類型轉(zhuǎn)換時檢測結(jié)果溢出的能力。通過checked運算符和checked語句來實現(xiàn)。

□代碼片段是否被檢查稱作溢出檢測上下文

--如果我們指定一個表達式或一段代碼為checked,CLR會在轉(zhuǎn)換產(chǎn)生溢出時拋出一個OverFlowException異常。

--如果代碼不是checked,轉(zhuǎn)換會繼續(xù)而不管是否產(chǎn)生溢出

(1)checked和unchecked運算符

*控制表達式的溢出檢測上下文。表達式放置在一對圓括號內(nèi)并且不能是一個方法。語法如下:

checked(表達式)、unchecked(表達式)

(2)checked語句和unchecked語句

作為運算符時用于圓括號內(nèi)的單個表達式。而用作語句時執(zhí)行相同的功能,但控制的是一塊代碼中的所有轉(zhuǎn)換,而不是單個表達式。

□checked語句和unchecked語句可以被嵌套在任意層次

2.引用轉(zhuǎn)換

引用類型對象由內(nèi)存中的兩部分組成:引用和數(shù)據(jù)

□由引用保存的那部分信息是它指向的數(shù)據(jù)類型

□引用類型接受源引用并返回一個指向堆中同一位置的引用,但是把引用“標記”為其他類型

?

2.1隱式引用轉(zhuǎn)換

與語言為我們自動實現(xiàn)的隱式數(shù)字轉(zhuǎn)換類似,還有隱式引用轉(zhuǎn)換。

□所有引用類型可以被隱式轉(zhuǎn)換為object類型。

□任何類型可以隱式轉(zhuǎn)換到它繼承的接口

□類可以隱式轉(zhuǎn)換到

--它繼承鏈中的任何類

--它實現(xiàn)的任何接口

?

?

?2.2顯式引用轉(zhuǎn)換

顯式引用轉(zhuǎn)換是從一個普通類型到一個更精確類型的引用轉(zhuǎn)換。

包括:

--從object到任何引用類型的轉(zhuǎn)換

--從基類到從它繼承的類的轉(zhuǎn)換

□倒轉(zhuǎn)16-18、16-19的箭頭方向,即可以演示顯式引用轉(zhuǎn)換。

如果轉(zhuǎn)換的類型不受限制,很可能會導致我們很容易地嘗試引用在內(nèi)存中實際并不存在的類成員。然而,編譯器確實允許這樣的轉(zhuǎn)換。到那時,若系統(tǒng)在運行時遇到它們則會拋出一個異常。

2.3有效顯示引用轉(zhuǎn)換

(1)顯示轉(zhuǎn)換是沒有必要的。即,語言已經(jīng)為我們進行了隱式轉(zhuǎn)換。e.g.

?

(2)源引用是null。e.g.,在下面的代碼中,即使轉(zhuǎn)換基類的引用到衍生類的引用通常會是不安全的,但由于源引用是null,這種轉(zhuǎn)換還是允許的。

(3)由源引用指向的實際數(shù)據(jù)可以安全地進行隱式轉(zhuǎn)換。

3.裝箱操作  (值=》引用)

包括值類型在內(nèi)的所有C#類型都派生自object類型。然而,值類型是高效輕量的類型,因為默認情況下在堆上不包括它們的對象組件。然而,如果需要對象組件,可以使用裝箱(boxing)。裝箱是一種隱式轉(zhuǎn)換,它接收值類型的值,根據(jù)這個值在堆上創(chuàng)建一個完整的引用類型對象并返回對象引用。

3.1裝箱是創(chuàng)建副本

一個有關裝箱的普遍誤解是在被裝箱的項上發(fā)生了一些操作。其實不是,它返回的是值引用類型副本。在裝箱產(chǎn)生之后,該值有兩份副本,原始值類型和引用類型副本,每一個都可以獨立操作。

?

4.拆箱轉(zhuǎn)換  (引用=》值)

拆箱(unboxing)是把裝箱后的對象轉(zhuǎn)回值類型的過程。

□拆箱是顯示轉(zhuǎn)換

□系統(tǒng)在把值拆箱城ValueTypeT時執(zhí)行了如下的步驟:

--它檢測到要拆箱的對象實際上是ValueTypeT的裝箱值。

--它把對象的值賦值到變量

?

?

5.is運算符

  如先前所說,有些轉(zhuǎn)換是不成功的,并且會在運行時拋出一個InvalidCastException異常,我們可以使用is運算符來檢查轉(zhuǎn)換是否會成功完成,從而避免盲目嘗試轉(zhuǎn)換。

Expr is TargetType? ?返回bool?

如果Expr可以通過以下方式成功轉(zhuǎn)換成目標類型,則返回true

□引用轉(zhuǎn)換

□裝箱操作

□拆箱操作(未找到例子)

通過裝箱操作可轉(zhuǎn)換成目標類型的例子:

static void Main(string[] args){int t = 5;object k = t;if (k is int)Console.WriteLine("!!"); Console.Read();}

輸出!!,說明k is int 判斷返回true。即對于某裝箱結(jié)果進行判斷時,會自動將其拆箱結(jié)果與目標類型進行比較。

關于is的官方文檔(必看,有的內(nèi)容更加詳細)

6.as運算符

as運算符和強制轉(zhuǎn)換運算符類似,只是它不拋出異常。如果轉(zhuǎn)換失敗,它返回null,而不是拋出異常。

和is運算符類似,as運算符只能用于引用轉(zhuǎn)換和裝箱轉(zhuǎn)換,不能用于用戶自定義轉(zhuǎn)換或到值類型的轉(zhuǎn)換。

?

轉(zhuǎn)載于:https://www.cnblogs.com/quintessence/p/9131982.html

總結(jié)

以上是生活随笔為你收集整理的review——C# (15)转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。