我做了一些分類,我不知道:c# - 是SHORT數據類型還是INT?
INT與關鍵字「INT」
原始數據類型,但我可以用Int16的,的Int32或Int64的 - 我知道C#有它自己的名字爲他們。但是,這些數據類型還是INT?主要是,我們可以說「short」是一個數據類型還是INT16是一個數據類型? 謝謝:)
我做了一些分類,我不知道:c# - 是SHORT數據類型還是INT?
INT與關鍵字「INT」
原始數據類型,但我可以用Int16的,的Int32或Int64的 - 我知道C#有它自己的名字爲他們。但是,這些數據類型還是INT?主要是,我們可以說「short」是一個數據類型還是INT16是一個數據類型? 謝謝:)
在C#中,下面的事情總是如此:
short
== Int16
ushort
== UInt16
int
== Int32
uint
== UInt32
long
== Int64
ulong
== UInt64
兩個版本的數據類型。以上都是各種長度和符號的整數。
兩個版本之間的主要區別(據我所知)是他們在Visual Studio中突出顯示的顏色。
short
是一種表示16位整數(低於int
,即32位)的數據類型。
Int16
實際上也是數據類型,與short
同義。也就是說,
Int16.Parse(someNumber);
也返回一個short
,一樣:
short.Parse(someNumber)
上也是如此Int32
爲int
和Int64
的long
。
在C#中,int
只是說System.Int32更短的方式。
在.NET中,甚至基本數據類型實際上都是對象(從System.Object派生)。
因此,C#中的int = VB.Net中的整數= System.Int32。
有這裏所有的.NET數據類型的圖表:http://msdn.microsoft.com/en-us/library/47zceaw7%28VS.71%29.aspx
這是.NET Common Type System允許.NET語言之間的無縫互操作的一部分。
「在.NET中,即使原始數據類型實際上也是對象」,你確定嗎?我一直認爲基元不是從對象派生出來的,而且從對象轉換到對象需要裝箱和拆箱(c#編譯器從你那裏隱藏起來,但仍然發生在IL級別上,舊的託管C++(在C++/CLI之前)使用__box和__unbox或類似的東西) – 2010-08-07 17:14:17
@Ben:這是Java。在.NET中,值類型可以被存儲,解除包裝,但它們仍然是從'System.Object'派生的,所以它們總是可以在需要Object的地方使用。而且,是的,這意味着它們會自動裝箱,盒裝版本是從「Object」明確派生的。 – 2010-08-07 17:18:21
我認爲你是對的。在幕後,int通常是一個4字節的內存,但在邏輯上它是一個從對象派生的結構,並且必要的自動裝箱恰好保持了這種外觀。所以真的,它是否是一個對象取決於你所說的概念層面。 – 2010-08-07 17:27:14
在其他答案中沒有提到的是值類型System.IntPtr
,它的位寬是特定於平臺的;例如在32位系統上,它是32位寬,而在64位系統上,它是64位寬。
話雖這麼說,所有我能收集這些類型並不意味着代替任何其他int
類型的實際使用;它的主要用途可能在於對底層系統API的P/Invoke,它通常用於保存指針。
顏色可能與它們是否是關鍵字有關。所以你可以命名一個變量'Int32',但不是'int'。 – Philipp 2010-08-07 16:45:12
區別在於左列包含本機C#名稱,這是更可取的。例外是調用這些類的靜態方法和屬性,這應該是CLR名稱。 – 2010-08-07 16:46:15
@菲利普啊,這是真的。我沒有想到這一點。不是你應該命名一個變量Int32! ;) – 2010-08-07 16:46:22