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

淺談C#類型系統(tǒng)

開發(fā) 后端
本文介紹C#類型系統(tǒng)一共分為兩類,一類是值類型(Value Type),一類是引用類型(Reference Type)。值類型和引用類型是以它們在計算機(jī)內(nèi)存中是如何被分配的來劃分的。

我們先簡單回顧一下C#類型系統(tǒng)。C#類型系統(tǒng)一共分為兩類,一類是值類型(Value Type),一類是引用類型(Reference Type)。值類型 和引用類型是以它們在計算機(jī)內(nèi)存中是如何被分配的來劃分的。值類型包括 結(jié)構(gòu)和枚舉,引用類型包括類、接口、委托等。還有一種特殊的值類型,稱為簡單類型(Simple Type),比如 byte,int等,這些簡單類型實(shí)際上是FCL類庫類型的別名,比如聲明一個int類型,實(shí)際上是聲明一個System.Int32結(jié)構(gòu)類型。因此,在 Int32類型中定義的操作,都可以應(yīng)用在int類型上,比如 “123.Equals(2)”。

所有的 值類型 都隱式地繼承自 System.ValueType類型(注意System.ValueType本身是一個類類型),System.ValueType和所有的引用類型都繼承自 System.Object基類。你不能顯示地讓結(jié)構(gòu)繼承一個類,因?yàn)镃#不支持多重繼承,而結(jié)構(gòu)已經(jīng)隱式繼承自ValueType。

1.值類型

當(dāng)聲明一個值類型的變量(Variable)的時候,變量本身包含了值類型的全部字段,該變量會被分配在線程堆棧(Thread Stack)上。假如我們有這樣一個值類型,它代表了直線上的一點(diǎn):

  1. public struct ValPoint {  
  2.     public int x;  
  3.  
  4.     public ValPoint(int x) {  
  5.        this.x = x;  
  6.     }  

2.引用類型

當(dāng)聲明一個引用類型變量的時候,該引用類型的變量會被分配到堆棧上,這個變量將用于保存位于堆上的該引用類型的實(shí)例的內(nèi)存地址,變量本身不包含對象的數(shù)據(jù)。此時,如果僅僅聲明這樣一個變量,由于在堆上還沒有創(chuàng)建類型的實(shí)例,因此,變量值為null,意思是不指向任何類型實(shí)例(堆上的對象)。對于變量的類型聲明,用于限制此變量可以保存的類型。

如果我們有一個這樣的類,它依然代表直線上的一點(diǎn):

  1. public class RefPoint {  
  2.     public int x;  
  3.  
  4.     public RefPoint(int x) {  
  5.        this.x = x;  
  6.     }  
  7.     public RefPoint() {}  

3.關(guān)于簡單類型

很多文章和書籍中在講述這類問題的時候,總是喜歡用一個int類型作為值類型 和一個Object類型作為引用類型來作說明。本文中將采用自定義的一個 結(jié)構(gòu) 和 類分別作值類型和引用類型的說明。這是因?yàn)楹唵晤愋?比如int)有一些CLR實(shí)現(xiàn)了的行為,這些行為會讓我們對一些操作產(chǎn)生誤解。

舉個例子,如果我們想比較兩個int類型是否相等,我們會通常這樣:

  1. int i = 3;  
  2. int j = 3;  
  3. if(i==j) Console.WriteLine("i equals to j"); 

實(shí)際上,在后面我們就會看到,當(dāng)使用“==”對引用類型變量進(jìn)行比較的時候,比較的是它們是否指向的堆上同一個對象。而上面a、b指向的顯然是不同的對象,只是對象包含的值相同,所以可見,對于string類型,CLR對它們的比較實(shí)際上比較的是值,而不是引用。

為了避免上面這些引起的混淆,在對象判等部分將采用自定義的結(jié)構(gòu)和類來分別說明。

裝箱和拆箱

這部分內(nèi)容可深可淺,本文只簡要地作一個回顧。簡單來說,裝箱 就是 將一個值類型轉(zhuǎn)換成等值的引用類型。它的過程分為這樣幾步:
1. 在堆上為新生成的對象(該對象包含數(shù)據(jù),對象本身沒有名稱)分配內(nèi)存。
2. 將 堆棧上 值類型變量的值拷貝到 堆上的對象 中。
3. 將堆上創(chuàng)建的對象的地址返回給引用類型變量(從程序員角度看,這個變量的名稱就好像堆上對象的名稱一樣)。
以上介紹C#類型系統(tǒng)

【編輯推薦】

  1. 分析C#不安全代碼
  2. 淺析C#調(diào)用ImageAnimator
  3. C#連接Access、SQL Server數(shù)據(jù)庫
  4. 淺談C#固定的和活動的變量
  5. 介紹C#中的值類型
責(zé)任編輯:佚名 來源: CSDN
相關(guān)推薦

2009-08-26 15:46:01

C#匿名類型

2009-08-10 14:55:04

C#定義Nullabl

2009-08-26 14:05:19

C#值類型和引用類型

2009-08-20 18:30:33

C# ReaderWr

2011-09-21 10:56:31

C#結(jié)構(gòu)

2009-08-14 17:04:50

C#類型系統(tǒng)

2009-08-07 11:26:53

C#數(shù)組結(jié)構(gòu)

2009-08-12 11:24:25

C# String對象

2009-08-31 09:37:09

C# Employee

2009-08-19 17:12:18

C# Connecti

2009-08-26 13:15:38

C#選擇控制

2009-08-25 16:16:43

C# oledbcon

2009-08-14 17:58:05

C#接口方法

2009-08-20 10:24:52

C#開發(fā)WinForm

2009-09-02 15:41:21

C# HTTPWebR

2009-08-10 10:04:25

C#抽象類C#接口

2009-02-03 09:33:26

動態(tài)類型動態(tài)編程C# 4.0

2009-08-24 17:24:28

C#創(chuàng)建XML文檔

2009-08-25 13:26:49

C#編寫asp+

2009-08-28 15:58:54

C#窗體里調(diào)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩伦理电影免费在线观看 | 精品国产乱码久久久久久图片 | 一区二区国产在线观看 | 国产欧美一区二区三区久久人妖 | 国产亚洲精品久久情网 | 麻豆精品一区二区三区在线观看 | 日韩一区二区三区在线 | 国产精品久久久久久影视 | aaaa一级毛片 | 麻豆av在线免费观看 | 欧美精品免费观看二区 | 少妇一区二区三区 | 欧美aⅴ在线观看 | 久草www| 日本久久网站 | 日韩欧美在线一区 | 五月婷婷在线视频 | 中文天堂网 | 亚洲视频免费在线观看 | 日日综合 | 国产午夜在线观看 | 一区在线播放 | 欧美日韩在线电影 | 香蕉久久av | 999久久久| 中文字幕乱码一区二区三区 | 亚洲欧美综合精品久久成人 | 久久国产美女视频 | 另类一区| 日韩在线免费视频 | 成人久久久久久久久 | 午夜私人影院在线观看 | 高清成人免费视频 | 欧洲高清转码区一二区 | 国产一级片 | 久久99精品久久久久久噜噜 | 中文字幕日韩一区 | 人人爽人人爽 | 成人在线视频网站 | 久久精品91久久久久久再现 | 一区二区三区亚洲 |