成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#中Boxing和Unboxing

開發 后端
本文介紹C#中Boxing和Unboxing,相比較C++,C#中的值類型和引用類型很簡單:所有的基本類型、結構和String屬于值類型,其它類型都屬于引用類型。那么值類型和引用類型有什么區別呢?

相比較C++,C#中的值類型和引用類型很簡單:所有的基本類型、結構(struct)和String屬于值類型,其它類型(其實也只剩下class了)都屬于引用類型。那么值類型和引用類型有什么區別呢?

值類型在賦值操作(“=”操作,函數參數,函數返回等)的時候,會把所有成員變量拷貝一遍給目標實例。

引用類型在賦值操作的時候,只是把實例的內存中的地址賦值給目標實例。

那么這兩者有什么區別呢?

那就是效率了:

引用類型的賦值只要傳遞一個內存地址,傳遞的數據量就是一個32(64位操作系統是64)位整數。

值類型需要傳遞該類型所包含的所有數據。

比如:

  1. struct Point  
  2. {  
  3. public int x;  
  4. public int y;  

那Point類型的實例在賦值的時候,要傳遞的數據量是兩個整數。

如果數據量更大的結構,每次賦值的時候都要傳遞一遍所有的成員,那么總的程序運行期內,傳遞的數據量就非常可觀了。

怎么解決這種效率問題呢?

有兩種方法:

1 使用ref關鍵字。

2 就是用所謂的Boxing和Unboxing了。

首先,C#中Boxing和Unboxing是針對值類型數據而言的。對引用類型來說,它本身就是引用類型,所以不存在Boxing和Unboxing的概念。

其次,Boxing的操作就是把值類型的數據賦值到一個object的引用類型實例中,這個過程是值賦值的過程(就是所以數據都copy一遍)。

如:

Point p = new Point{x=10, y=11};

Object o = p;

這個變量o就是Boxing之后的引用類型了。記住一點,boxing之后,變量o就跟p無關了,它們是兩個不同類型的變量,指向不同的內存地址。

***,Unboxing的操作是把這個object的引用類型實例,以值傳遞的方式賦值給目標對象。

如:

Point p2 = (Point)o;

unboxing之后,p2跟o就無關了,它們是兩個不同類型的變量,指向不同的內存地址。

也就是說,Boxing和Unboxing的***用途就是用于數據傳遞。

理解Boxing和Unboxing還要與class的類型向父類/子類轉換的操作區別開來(面向對象語言的繼承機制)。

將一個class的實例轉換成它的父類或子類類型,這是類的繼承機制。這種轉換其實只是把實例的類型信息變了下,實例對應的數據,內存地址都沒變動。轉換前后的實例都是指向同一塊內存。

但我們可以把C#中Boxing和Unboxing和class繼承機制統一起來,用一句話來概括就是:引用進,引用出;值進,值出。

【編輯推薦】

  1. C#調用Windows API函數
  2. 詳解C#調用Outlook API
  3. C#連接Access、SQL Server數據庫
  4. 介紹C#調用API的問題
  5. C#調用Excel與附加代碼
責任編輯:佚名 來源: 百度空間
相關推薦

2024-03-19 14:41:08

C#操作符開發

2009-08-13 17:04:09

C#語言C#程序

2009-08-27 16:11:03

C# delegateC# event

2011-06-17 16:42:23

C#

2024-10-05 00:00:35

Action?C#Func?

2024-05-30 12:24:03

C#開發

2009-08-26 10:34:15

C#類型C#變量

2009-08-19 16:50:32

Visual C#C#語言特性

2025-01-24 08:32:00

運算符C#

2009-09-01 17:51:47

C#拆箱C#裝箱

2009-08-10 10:04:25

C#抽象類C#接口

2009-07-31 16:06:50

成員函數構造函數C#

2011-06-08 13:50:39

C#類型轉換

2009-08-06 15:40:11

C#裝箱和拆箱

2024-09-29 09:28:38

Action?C#

2009-08-03 15:06:43

C# Stack對象C# Queue對象

2009-08-28 17:18:55

foreach循環

2009-08-19 10:09:21

C#和C++

2009-08-27 16:18:47

C#類C#結構體

2009-08-26 09:54:45

C#打印預覽C#打印
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人欧美一区二区三区1314 | 99视频在线| 91精品久久久久 | 日韩视频精品在线 | 精品毛片| 国产精品久久久久aaaa樱花 | 日本在线免费视频 | 午夜欧美一区二区三区在线播放 | 在线观看特色大片免费网站 | 欧美视频一区二区三区 | 国产伊人久久久 | 日韩中文字幕一区二区三区 | 五月天婷婷久久 | 国产伦精品一区二区三区高清 | 日韩一区二区三区在线观看 | 国产一级片一区二区三区 | 日韩一区二区三区精品 | 国产精品成人一区二区三区 | 欧美日韩亚洲国产 | 久久一区二区三区四区 | 久久久福利 | 国产小网站 | 久久综合激情 | 蜜臀av日日欢夜夜爽一区 | 欧美一级欧美三级在线观看 | 日韩欧美在线一区二区 | 久久在线视频 | 久久久日韩精品一区二区三区 | 青草青草久热精品视频在线观看 | 毛片在线看片 | 亚洲综合大片69999 | 国产精品一区二区免费看 | 羞羞视频网站免费观看 | 天天插天天搞 | 在线观看中文字幕视频 | 欧美一级免费 | av一级久久| 亚洲网站在线播放 | 在线免费观看a级片 | 精品视频久久久久久 | 国产美女一区二区 |