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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net装箱拆箱编程实例

發(fā)布時間:2025/4/14 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net装箱拆箱编程实例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

.Net裝箱拆箱編程實例



裝箱是將值類型轉(zhuǎn)換為引用類型 ;拆箱是將引用類型轉(zhuǎn)換為值類型。
利用裝箱和拆箱功能,可通過允許值類型的任何值與Object 類型的值相互轉(zhuǎn)換,將值類型與引用類型鏈接起來。

由于C#中所有的數(shù)據(jù)類型都是由基類System.Object繼承而來的,所以值類型和引用類型的值可以通過顯式(或隱式)操作相互轉(zhuǎn)換,而這轉(zhuǎn)換過程也就是裝箱(boxing)和拆箱(unboxing)過程。


裝箱是將值類型轉(zhuǎn)換為 object 類型或由此值類型實現(xiàn)的任何接口類型的過程。當(dāng) CLR 對值類型進行裝箱時,會將該值包裝到 System.Object 內(nèi)部,再將后者存儲在托管堆上。取消裝箱將從對象中提取值類型。裝箱是隱式的;取消裝箱是顯式的。裝箱和取消裝箱的概念是類型系統(tǒng) C# 統(tǒng)一視圖的基礎(chǔ),其中任一類型的值都被視為一個對象。

相對于簡單的賦值而言,裝箱和取消裝箱過程需要進行大量的計算。對值類型進行裝箱時,必須分配并構(gòu)造一個新對象。取消裝箱所需的強制轉(zhuǎn)換也需要進行大量的計算,只是程度較輕。

裝箱用于在垃圾回收堆中存儲值類型。裝箱是值類型到 object 類型或到此值類型所實現(xiàn)的任何接口類型的隱式轉(zhuǎn)換。對值類型裝箱會在堆中分配一個對象實例,并將該值復(fù)制到新的對象中。

取消裝箱是從 object 類型到值類型或從接口類型到實現(xiàn)該接口的值類型的顯式轉(zhuǎn)換。取消裝箱操作包括:
? ? 檢查對象實例,以確保它是給定值類型的裝箱值。
? ? 將該值從實例復(fù)制到值類型變量中。

三 編程實例

1 演示正常的裝箱拆箱

using System;


// boxing.cs
// Boxing an integer variable


class TestBoxing ?
{
? ?public static void Main()?
? ?{
? ? ? int i = 123;
? ? ? object o = i; ?// Implicit boxing
? ? ? i = 456; ? ? ? // Change the contents of i
? ? ? Console.WriteLine("The value-type value = {0}", i);
? ? ? Console.WriteLine("The object-type value = {0}", o);
? ? ??
? ? ? //裝箱和取消裝箱操作:
int i2 = 123; ? ? ? ? ?// A value type
object box = i2; ? ? ? // Boxing
int j2 = (int)box; ? ? // Unboxing
Console.WriteLine(box);
Console.WriteLine(j2);
? ? ??
? ? ? Console.Write("按任意鍵繼續(xù) . . . ");
Console.ReadKey(true);
? ?}
}

運行截圖;



2 正常的裝箱拆箱和拆箱發(fā)生異常時捕獲到異常


using System;
public class UnboxingTest?
{
? ?public static void Main()?
? ?{
? ? ? int intI = 123;


? ? ? // Boxing
? ? ? object o = intI;


? ? ? // Reference to incompatible object produces InvalidCastException
? ? ? try?
? ? ? {
? ? ? ? ?int intJ = (short) o;
? ? ? ? ?//int intJ = (int) o;
? ? ? ? ?Console.WriteLine("Unboxing OK.");
? ? ? ? ?Console.Write("按任意鍵繼續(xù) . . . ");
Console.ReadKey(true);
? ? ? }


? ? ? catch (InvalidCastException e)?
? ? ? {
? ? ? ? ?Console.WriteLine("{0} Error: Incorrect unboxing.",e);
? ? ? ? ?Console.Write("按任意鍵繼續(xù) . . . ");
Console.ReadKey(true);
? ? ? }
? ?}
}

? ? 上述程序分別把上面一句 int intJ定義語句和下面一句int intJ定義語句注釋掉的運行截圖分別如下;





工程源碼:

http://pan.baidu.com/s/1dDs7jdn

總結(jié)

以上是生活随笔為你收集整理的.Net装箱拆箱编程实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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