程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#中的基元類型(2)

C#中的基元類型(2)

編輯:關於C語言

結論:它們都是申明一個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語句來實現:

using sbyte=System.SBYTE;
using int=System.Int32;
using string=System.String;

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

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

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

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

分析:從OO的角度來講,這種轉換並不是"太正常":

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

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

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

類型之間的轉換提供了兩種方式:

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved