在编译时隐式输入变量初始化

时间:2013-03-27 10:09:39

标签: c# compilation var

当我读到隐式类型变量时,我想到了这个问题。 我在互联网上找不到答案所以决定把它放在野兔身上。

假设我使用'var'关键字声明变量。

var i = 10;

编译后,我被编译/处理为'整数'i。

现在,我的问题是为什么'i'没有被编译为'short',因为'i'的值非常小以适应'Short'数据类型;以及为什么它总是编译成'整数'??

1 个答案:

答案 0 :(得分:6)

因为C# Specification 2.4.4.2规定如果数字文字没有小数或后缀,则它是intuintlong或{{1}中最小的一个可以包含它。自然ulong符合10所以选择它。

  

整数文字的类型确定如下:

     
      
  • 如果文字没有后缀,则它具有这些类型中的第一个,其值可以表示为:int,uint,long,ulong。
  •   

C#语言设计者认为即使Int32适合10,但使用该变量类型的情况相对较少; Int16用法将是“现状”。

实际上,如果内存服务,无论如何,C#中都有 no Int32字面值。您必须明确声明并为Int16分配值才能获得一个。


有趣的是,我查看了已编译的IL代码并声明Int16short s = 10实际上生成完全相同的IL ...所以现在我想知道如何管理短路;也许它们实际上在CLI中作为32位值进行管理。我很想知道是否是这种情况。