我做了一些分类,我不知道: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