日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
淺談C#基元類(lèi)型及常見(jiàn)問(wèn)題解答

什么是C#基元類(lèi)型?

專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)墨脫免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

我想并不是每一位開(kāi)發(fā)者都清楚的,有部分的朋友只知道怎么在工作中應(yīng)用它(例如int,string)。如果一個(gè)編程基礎(chǔ)比較扎實(shí)的朋友來(lái)說(shuō)當(dāng)然不在話下,就不說(shuō)別人,拿我自己來(lái)說(shuō),編程三年多,我都不太關(guān)心什么是基元類(lèi)型,它有什么用,其實(shí)不知道這些對(duì)工作也不會(huì)產(chǎn)生決定性的影響。如果你不知道基類(lèi)型的概念,但會(huì)用int,float之類(lèi),對(duì)平常工作是沒(méi)有太大影響的。但如果有人和你討論這些東西時(shí),還是覺(jué)的非常有必要對(duì)其進(jìn)行了解和學(xué)習(xí)。

比較常見(jiàn)的問(wèn)題,其中一個(gè)也是最近園友說(shuō)過(guò)的:

第一:int和int32有啥區(qū)別?

第二:string和String又有啥區(qū)別?

像很多園友回復(fù)的一樣,對(duì)這些東西有時(shí)不必要太過(guò)較真,但既然有這樣的問(wèn)題,總規(guī)要有答案了。這里我列出以下幾種申明一個(gè)整形變量的代碼:

 
 
 
  1. //最簡(jiǎn)單  
  2.             int a = 0;  
  3.             //較簡(jiǎn)潔的  
  4.             Int32 b=0;  
  5.             //不簡(jiǎn)潔的  
  6.             int c = new int();  
  7.             //最不簡(jiǎn)潔  
  8.             System.Int32 d = new System.Int32(); 

我們?cè)賮?lái)看下這些代碼生成的IL代碼:

  
 
 
  1. .method private hidebysig static void  Main(string[] args) cil managed  
  2. {  
  3.   .entrypoint  
  4.   // 代碼大小       10 (0xa)  
  5.   .maxstack  1  
  6.   .locals init ([0] int32 a,  
  7.            [1] int32 b,  
  8.            [2] int32 c,  
  9.            [3] int32 d)  
  10.   IL_0000:  nop  
  11.   IL_0001:  ldc.i4.0  
  12.   IL_0002:  stloc.0  
  13.   IL_0003:  ldc.i4.0  
  14.   IL_0004:  stloc.1  
  15.   IL_0005:  ldc.i4.0  
  16.   IL_0006:  stloc.2  
  17.   IL_0007:  ldc.i4.0  
  18.   IL_0008:  stloc.3  
  19.   IL_0009:  ret  
  20. } // end of method Program::Main 

 
結(jié)論:它們都是申明一個(gè)int32類(lèi)型的變量,并且對(duì)其進(jìn)行了初始化。至于這是什么原因呢?這里就只能用基元類(lèi)型來(lái)解釋了。我們來(lái)看下C#的基元類(lèi)型和FCL以及CLS的部分關(guān)系。從下面的表中可以看出:

C# Primitive Typ FCL Type CLS-Compliant
sbyte System.SBte NO
byte System.Byte YES
short System.Int16 YES
ushort System.UInt16 NO
int System.Int32 YES
uint System.UInt32 NO
long System.Int64 YES
ulong System.UInt64 NO
char System.Char YES
float System.Single YES
double System.Double YES
decimal System.Decimal YES
object System.Object YES
string System.Strign YES

 1:int被映射到FCL中的System.Int32中。這里足以解釋上面四種創(chuàng)建變量的結(jié)果為什么是一樣的原因。

2:string和System.Sting其實(shí)并無(wú)實(shí)質(zhì)的區(qū)別,說(shuō)的簡(jiǎn)單點(diǎn),string是String的一個(gè)別名。

using方式理解基元類(lèi)型和FCL的關(guān)系 : 可以利用using語(yǔ)句來(lái)實(shí)現(xiàn):

  
 
 
  1. using sbyte=System.SBYTE;  
  2.      using int=System.Int32;  
  3.      using string=System.String; 

FCL類(lèi)型之間的轉(zhuǎn)換:我們知道在FCL類(lèi)型變量之間可以進(jìn)行相關(guān)的轉(zhuǎn)換,例如:

  
  
  
  1. Int32 i=0;  
  2.      Int64 j=i;//隱式轉(zhuǎn)換成Int64 

下面是對(duì)應(yīng)的IL代碼:我們可以看出有一人conv.i8操作,這里就是數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。

   
  
  
  1. .method private hidebysig static void  Main(string[] args) cil managed  
  2. {  
  3.   .entrypoint  
  4.   // 代碼大小       7 (0x7)  
  5.   .maxstack  1  
  6.   .locals init ([0] int32 i,  
  7.            [1] int64 j)  
  8.   IL_0000:  nop  
  9.   IL_0001:  ldc.i4.0  
  10.   IL_0002:  stloc.0  
  11.   IL_0003:  ldloc.0  
  12.   IL_0004:  conv.i8  
  13.   IL_0005:  stloc.1  
  14.   IL_0006:  ret  
  15. } // end of method Program::Main 

 分析:從OO的角度來(lái)講,這種轉(zhuǎn)換并不是"太正常":

1:Int32和Int64是兩種不同的數(shù)據(jù)類(lèi)型;

2:兩者之間并不存在繼承關(guān)系。

問(wèn)題:為什么兩者之間能夠正常轉(zhuǎn)換呢?也是因?yàn)榛?lèi)型和的關(guān)系。

C#基元類(lèi)型之間的轉(zhuǎn)換提供了兩種方式:

第一:隱式轉(zhuǎn)換,如果兩個(gè)C#基元類(lèi)型之間是類(lèi)型安全的,則可以直接進(jìn)行轉(zhuǎn)換;

第二:顯示轉(zhuǎn)換,C#基元類(lèi)型之間是非安全的,需要強(qiáng)制轉(zhuǎn)換。


當(dāng)前名稱(chēng):淺談C#基元類(lèi)型及常見(jiàn)問(wèn)題解答
當(dāng)前地址:http://www.5511xx.com/article/djpjchi.html