天天看點

C#中int和System.Int32了解總結

本文的主要參考資料:

一.問題的來源

應該是等價的,或者說毫無差別的。

(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,如需轉載請自行聯系原作者。