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

淺談C#基元類型及常見問題解答

開發 后端
這篇文章我想復習下C#中的基元類型。雖然搞清楚基元類型的知識并不會是你工作的必要條件,但做為一個搞技術的人來說還是非常有必要的。

什么是C#基元類型?

我想并不是每一位開發者都清楚的,有部分的朋友只知道怎么在工作中應用它(例如int,string)。如果一個編程基礎比較扎實的朋友來說當然不在話下,就不說別人,拿我自己來說,編程三年多,我都不太關心什么是基元類型,它有什么用,其實不知道這些對工作也不會產生決定性的影響。如果你不知道基類型的概念,但會用int,float之類,對平常工作是沒有太大影響的。但如果有人和你討論這些東西時,還是覺的非常有必要對其進行了解和學習。

比較常見的問題,其中一個也是最近園友說過的:

第一:int和int32有啥區別?

第二:string和String又有啥區別?

像很多園友回復的一樣,對這些東西有時不必要太過較真,但既然有這樣的問題,總規要有答案了。這里我列出以下幾種申明一個整形變量的代碼:

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

我們再來看下這些代碼生成的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 
 結論:它們都是申明一個int32類型的變量,并且對其進行了初始化。至于這是什么原因呢?這里就只能用基元類型來解釋了。我們來看下C#的基元類型和FCL以及CLS的部分關系。從下面的表中可以看出:
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中。這里足以解釋上面四種創建變量的結果為什么是一樣的原因。

2:string和System.Sting其實并無實質的區別,說的簡單點,string是String的一個別名。

using方式理解基元類型和FCL的關系 : 可以利用using語句來實現:     

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

FCL類型之間的轉換:我們知道在FCL類型變量之間可以進行相關的轉換,例如:

  1. Int32 i=0;  
  2.      Int64 j=i;//隱式轉換成Int64 

下面是對應的IL代碼:我們可以看出有一人conv.i8操作,這里就是數據類型的轉換。 

  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的角度來講,這種轉換并不是"太正常":

1:Int32和Int64是兩種不同的數據類型;

2:兩者之間并不存在繼承關系。

問題:為什么兩者之間能夠正常轉換呢?也是因為基元類型和的關系。

C#基元類型之間的轉換提供了兩種方式:

第一:隱式轉換,如果兩個C#基元類型之間是類型安全的,則可以直接進行轉換;

第二:顯示轉換,C#基元類型之間是非安全的,需要強制轉換。

【編輯推薦】

  1. C#語言與Java語言程序的比較
  2. C#和VB.NET類型相關知識匯總
  3. C# 2010命名和可選參數的新特性
  4. 討論:C# 4.0新特性dynamic有何用?
  5. C++、Java與C#的命名規范總結
責任編輯:彭凡 來源: cnblogs
相關推薦

2009-10-13 14:56:00

CCNA培訓

2011-07-13 17:57:15

SQLite

2011-08-09 15:10:00

SQLite

2010-09-13 14:43:47

無線技術常見問題

2023-10-10 08:01:13

2010-12-27 14:50:16

Windows 部署服

2010-05-12 17:04:20

BlackBerry開

2010-08-26 13:24:15

CSSmargin

2010-07-28 11:25:08

Flex滾動條

2013-03-04 13:58:10

2013-05-23 09:49:49

Chrome for google

2011-05-10 15:30:22

SEO

2017-06-12 15:51:11

數據中心布線運維

2011-07-21 11:19:51

JAVA

2015-06-30 12:39:33

公有云問題解答

2025-03-28 10:19:06

2009-09-02 17:14:12

郵件服務器

2010-08-19 10:44:47

DB2 常見問題

2020-10-16 08:24:40

物聯網網關物聯網IOT

2020-10-16 19:23:50

物聯網網關物聯網IOT
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久国产精品久久 | 久久精品小视频 | 色网站视频 | 国产精品不卡视频 | 欧美一区二区视频 | 亚洲欧美在线一区 | 国产精品美女久久久久久免费 | 久草在线在线精品观看 | 亚洲日韩中文字幕一区 | 国产欧美精品一区二区色综合朱莉 | 极品的亚洲 | 亚洲精品一区久久久久久 | 二区不卡| 欧美在线一区二区三区 | 91精品国产欧美一区二区成人 | 一区久久 | 国产电影一区 | 日韩一级免费 | 99在线免费观看视频 | 黄色av大片 | 日本小电影在线 | 国产精彩视频一区 | 日韩成人在线免费观看 | 久久久久久免费毛片精品 | 中文字幕视频在线观看免费 | 亚洲精品99| 国产高清精品一区 | 色婷婷综合久久久久中文一区二区 | 国产精品视频一区二区三区 | 一区二区福利视频 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 成人欧美一区二区 | 男女深夜网站 | 久热免费| 国产精品视屏 | 一区二区三区免费在线观看 | 午夜久久久 | 婷婷久久网 | 毛片99 | 一区二区三区在线观看免费视频 | 成人精品一区二区三区 |