日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

review——C# (15)转换

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

FROM P286

1.數字的轉換

1.1溢出檢測上下文

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

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

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

--如果代碼不是checked,轉換會繼續而不管是否產生溢出

(1)checked和unchecked運算符

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

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

(2)checked語句和unchecked語句

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

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

2.引用轉換

引用類型對象由內存中的兩部分組成:引用和數據

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

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

?

2.1隱式引用轉換

與語言為我們自動實現的隱式數字轉換類似,還有隱式引用轉換。

□所有引用類型可以被隱式轉換為object類型。

□任何類型可以隱式轉換到它繼承的接口

□類可以隱式轉換到

--它繼承鏈中的任何類

--它實現的任何接口

?

?

?2.2顯式引用轉換

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

包括:

--從object到任何引用類型的轉換

--從基類到從它繼承的類的轉換

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

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

2.3有效顯示引用轉換

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

?

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

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

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

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

3.1裝箱是創建副本

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

?

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

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

□拆箱是顯示轉換

□系統在把值拆箱城ValueTypeT時執行了如下的步驟:

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

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

?

?

5.is運算符

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

Expr is TargetType? ?返回bool?

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

□引用轉換

□裝箱操作

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

通過裝箱操作可轉換成目標類型的例子:

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

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

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

6.as運算符

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

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

?

轉載于:https://www.cnblogs.com/quintessence/p/9131982.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。