本文的主要參考資料:
一.問題的來源
應該是等價的,或者說毫無差別的。
(1).使用int和使用System.Int32是沒有差別的。
(2).在C#的Struct定義中,字段中存在類型為自己的變量,是不允許的,例子如下:
上面這個例子編譯會失敗。由于System.Int32等價于int ,是以System.Int32的編譯也應該會失敗的!但事實上是,Reflector反編譯出來的代碼的确顯示System.Int32定義中使用了int。這就不禁讓人懷疑,int和System.Int32的關系到底是不是如MSDN所說的這麼簡單呢??究竟int是System.Int32的别名呢?還是System.Int32對int進行了封裝呢?
二.int和System.Int32的關系
下圖是我從微軟官方介紹裡截取的,我們先簡單看一下.Net Framework的架構:
.Net Framework是一個基礎平台,它要支援建立在此基礎上的各種語言,以及跨語言程式之間的通信。如圖:
由于上述原因,.Net Framework對外提供的資源必須是通用的,并且避免使用某種語言的特有稱呼,以免造成不必要的混淆。
于是,這就有了int和System.Int32,它們的關系如下圖:
System.Int32是.Net Framework對32位整數的辨別,MSDN對這種類型标示的稱呼是User Type。而int則是c#語言裡面的特有稱呼(這裡它對應的.Net Framework裡的System.Int32),MSDN對c#的int的稱呼是Keyword。int就是System.Int32的别名而已!
這裡我引用Dixin文章裡的一段IL代碼證明int32的存在:>
C#代碼:
對應得IL代碼:
三.System.Int32在64位機器上
System.Int32在64位機器上還是表示32位的整數,也就是說C#的int在64位機器上也還是表示32位的整數。至于為什麼,看下圖:
如果System.Int32在64位機器為64bit,那麼,這将會使在32位機器上的C#程式難以和64位上的C#程式溝通,試想一下,要把64bit的資料塞進32bit的空間中是一件多惡心的事情啊!是以,System.Int32在64位機器還是表示32位的長度,是很合理的。
本文轉自hyddd部落格園部落格,原文連結:http://www.cnblogs.com/hyddd/archive/2009/06/19/1506400.html,如需轉載請自行聯系原作者。