真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#基元類(lèi)型、值類(lèi)型、引用類(lèi)型是什么

這篇文章主要講解了“C#基元類(lèi)型、值類(lèi)型、引用類(lèi)型是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“C#基元類(lèi)型、值類(lèi)型、引用類(lèi)型是什么”吧!

創(chuàng)新互聯(lián)建站專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、玉林網(wǎng)絡(luò)推廣、成都小程序開(kāi)發(fā)、玉林網(wǎng)絡(luò)營(yíng)銷(xiāo)、玉林企業(yè)策劃、玉林品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供玉林建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):028-86922220,官方網(wǎng)址:www.cdcxhl.com

首先了解下什么是基元類(lèi)型,基元類(lèi)型是編譯器直接支持的數(shù)據(jù)類(lèi)型,像我們平時(shí)經(jīng)常用到的int string bool 都是基元類(lèi)型,基元類(lèi)型是映射到FCL中的類(lèi)型,像前面的三種類(lèi)型對(duì)應(yīng)到FCL中就是Int32 String Boolean,基元類(lèi)型只是給我們的編程提供了方便,它和FCL中的類(lèi)型在編譯后最終生成的IL完全相同。下面給出基元類(lèi)型和FCL類(lèi)型的對(duì)應(yīng)表
我們平時(shí)在寫(xiě)程序時(shí)通常都是使用基元類(lèi)型,因?yàn)榉奖悖緯?shū)的作者認(rèn)為應(yīng)該直接使用FCL中的類(lèi)型,原因如下:

C#基元類(lèi)型

FCL類(lèi)型

CLS相容

說(shuō)明

sbyte

System.Sbyte

 

 

byte

System.Byte

 

 

short

System.Int16

 

 

ushort

System.UInt16

 

 

int

System.Int32

 

 

uint

System.Uint32

 

 

long

System.Int64

 

 

ulong

System.Uint64

 

 

char

System.Char

 

 

float

System.Single

 

 

double

System.Double

 

 

bool

System.Boolean

 

 

decimal

System.Decimal

 

 

object

System.Object

 

 

string

System.String

 

 

在c#中l(wèi)ong對(duì)應(yīng)的FCL類(lèi)型為System.Int64,但是在其他的語(yǔ)言中,如c++ 就將long視為一個(gè)Int32。這樣習(xí)慣于一種編程語(yǔ)言的人在看另一種編程語(yǔ)言寫(xiě)的源碼是就會(huì)產(chǎn)生錯(cuò)誤的理解。在FCL中的許多的方法將類(lèi)型名作為方法名的一部分,如System.Convert類(lèi)提供ToBoolean,ToInt32,ToSingle等。這樣在使用基元類(lèi)型做類(lèi)型轉(zhuǎn)換時(shí)就感覺(jué)有點(diǎn)怪怪的,如:float val=Convert.ToSingle(“23”);

CLR VIA C#教程之值類(lèi)型和引用類(lèi)型的區(qū)別
1.所有的值類(lèi)型都是從System.TypeValue派生,如Struct Enum都是值類(lèi)型;所有引用類(lèi)型都是從System.Object派生。
2.值類(lèi)型分配在線(xiàn)程堆棧上,引用類(lèi)型分配在托管堆上。
3.值類(lèi)型表現(xiàn)形式有未裝箱形式和已裝箱形式,而引用類(lèi)型總是已裝箱形式。
4.所有的值類(lèi)型都是sealed類(lèi)型,所以值類(lèi)型不能作為任何類(lèi)型的基類(lèi)型,也不能在值類(lèi)型中引入虛方法。
5.創(chuàng)建一個(gè)引用類(lèi)型變量時(shí),會(huì)被初始化為null,試圖使用一個(gè)null的引用類(lèi)型變量時(shí),會(huì)拋出NullReferenceException異常,也就是常見(jiàn)的“未將對(duì)象引用設(shè)置到對(duì)象的實(shí)例”;值類(lèi)型在創(chuàng)建時(shí)所有成員都初始化為0了,所以不會(huì)拋出該異常。

原文例子表示值類(lèi)型和引用類(lèi)型的區(qū)別

class Program  {  static void Main(string[] args)  {  SomeRef r1 = new SomeRef();  SomeVal v1 = new SomeVal();  r1.x = 5;  v1.x = 5;  Console.WriteLine(r1.x);    //5  Console.WriteLine(v1.x);    //5  SomeRef r2 = r1;  SomeVal v2 = v1;  r1.x = 8;  v1.x = 9;  Console.WriteLine(r1.x);    //8  Console.WriteLine(r2.x);    //9  Console.WriteLine(v1.x);    //9  Console.WriteLine(v2.x);    //5  }  }  class SomeRef  {  public Int32 x;  }  struct SomeVal  {  public Int32 x;  }


CLR VIA C#教程之CLR中類(lèi)型字段布局的控制

為了提高性能,clr能按照所選擇的任何方式來(lái)排列類(lèi)型的字段。我們可以通過(guò)在類(lèi)會(huì)是結(jié)構(gòu)上使用System.Runtime.InteropServices.StructLayoutAttribute屬性來(lái)改變這種排列的順序。該屬性接受一個(gè)LayoutKind的枚舉值(Auto,Sequential,Explicit),默認(rèn)情況下C#編譯器會(huì)為類(lèi)選擇Atuo,為結(jié)構(gòu)選擇Sequential。下面來(lái)定義一個(gè)類(lèi)和一個(gè)結(jié)構(gòu)

struct SomeVal  {  public String name;  public Int32 id;   }   class SomeRel  {  public String name;  public Int32 id;  }

查看IL代碼可以看到默認(rèn)的排列順序

C#基元類(lèi)型、值類(lèi)型、引用類(lèi)型是什么

現(xiàn)在給類(lèi)和結(jié)構(gòu)加上屬性,首引用加命名空間 using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Auto)]  struct SomeVal  {  public String name;  public Int32 id;  }  [StructLayout(LayoutKind.Sequential)]  class SomeRel  {  public String name;  public Int32 id;  }

再查看IL可以看到順序已經(jīng)發(fā)生了變化

    C#基元類(lèi)型、值類(lèi)型、引用類(lèi)型是什么

C#編譯器總是會(huì)默認(rèn)給結(jié)構(gòu)這樣的值類(lèi)型選擇Sequential,是因?yàn)橹殿?lèi)型會(huì)經(jīng)常和非托管代碼進(jìn)行交互,字段必須保持和開(kāi)發(fā)人員定義的一致。我們?cè)诰幋a過(guò)程中如果判斷所創(chuàng)建的值類(lèi)型不會(huì)與非托管代碼進(jìn)行交互,就可以像上面那樣給創(chuàng)建的值類(lèi)型添加[StructLayout(LayoutKind.Auto)] ,讓其進(jìn)行自動(dòng)排列,以提高性能。

感謝各位的閱讀,以上就是“C#基元類(lèi)型、值類(lèi)型、引用類(lèi)型是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)C#基元類(lèi)型、值類(lèi)型、引用類(lèi)型是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


新聞標(biāo)題:C#基元類(lèi)型、值類(lèi)型、引用類(lèi)型是什么
網(wǎng)站網(wǎng)址:http://weahome.cn/article/peehho.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部