自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#中Boxing和Unboxing

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

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

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

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

那么這兩者有什么區(qū)別呢?

那就是效率了:

引用類型的賦值只要傳遞一個內存地址,傳遞的數據量就是一個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的類型向父類/子類轉換的操作區(qū)別開來(面向對象語言的繼承機制)。

將一個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#操作符開發(fā)

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#開發(fā)

2009-08-26 10:34:15

C#類型C#變量

2009-08-19 16:50:32

Visual C#C#語言特性

2025-01-24 08:32:00

運算符C#

2011-06-08 13:50:39

C#類型轉換

2024-09-29 09:28:38

Action?C#

2009-08-06 15:40:11

C#裝箱和拆箱

2009-07-31 16:06:50

成員函數構造函數C#

2009-08-03 15:06:43

C# Stack對象C# Queue對象

2009-08-28 17:18:55

foreach循環(huán)

2009-08-10 10:04:25

C#抽象類C#接口

2009-09-01 17:51:47

C#拆箱C#裝箱

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技術棧公眾號