2010-08-07 66 views
8

我做了一些分类,我不知道:c# - 是SHORT数据类型还是INT?

INT与关键字“INT”

原始数据类型,但我可以用Int16的,的Int32或Int64的 - 我知道C#有它自己的名字为他们。但是,这些数据类型还是INT?主要是,我们可以说“short”是一个数据类型还是INT16是一个数据类型? 谢谢:)

回答

21

在C#中,下面的事情总是如此:

  • short == Int16
  • ushort == UInt16
  • int == Int32
  • uint == UInt32
  • long == Int64
  • ulong == UInt64

两个版本的数据类型。以上都是各种长度和符号的整数。

两个版本之间的主要区别(据我所知)是他们在Visual Studio中突出显示的颜色。

+0

颜色可能与它们是否是关键字有关。所以你可以命名一个变量'Int32',但不是'int'。 – Philipp 2010-08-07 16:45:12

+0

区别在于左列包含本机C#名称,这是更可取的。例外是调用这些类的静态方法和属性,这应该是CLR名称。 – 2010-08-07 16:46:15

+0

@菲利普啊,这是真的。我没有想到这一点。不是你应该命名一个变量Int32! ;) – 2010-08-07 16:46:22

3

short是一种表示16位整数(低于int,即32位)的数据类型。

Int16实际上也是数据类型,与short同义。也就是说,

Int16.Parse(someNumber); 

也返回一个short,一样:

short.Parse(someNumber) 

上也是如此Int32intInt64long

2

在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语言之间的无缝互操作的一部分。

+0

“在.NET中,即使原始数据类型实际上也是对象”,你确定吗?我一直认为基元不是从对象派生出来的,而且从对象转换到对象需要装箱和拆箱(c#编译器从你那里隐藏起来,但仍然发生在IL级别上,旧的托管C++(在C++/CLI之前)使用__box和__unbox或类似的东西) – 2010-08-07 17:14:17

+0

@Ben:这是Java。在.NET中,值类型可以被存储,解除包装,但它们仍然是从'System.Object'派生的,所以它们总是可以在需要Object的地方使用。而且,是的,这意味着它们会自动装箱,盒装版本是从“Object”明确派生的。 – 2010-08-07 17:18:21

+0

我认为你是对的。在幕后,int通常是一个4字节的内存,但在逻辑上它是一个从对象派生的结构,并且必要的自动装箱恰好保持了这种外观。所以真的,它是否是一个对象取决于你所说的概念层面。 – 2010-08-07 17:27:14

0

在其他答案中没有提到的是值类型System.IntPtr,它的位宽是特定于平台的;例如在32位系统上,它是32位宽,而在64位系统上,它是64位宽。

话虽这么说,所有我能收集这些类型并不意味着代替任何其他int类型的实际使用;它的主要用途可能在于对底层系统API的P/Invoke,它通常用于保存指针

相关问题