int []和string []类在哪里定义?

时间:2013-03-20 00:26:05

标签: c# arrays string int

int a = 0;
int[] b = new int[3];

Console.WriteLine( a.GetType() );
Console.WriteLine( b.GetType() );

a 的类型是System.Int32,它是一个结构。 b 的类型为int[]

我可以在Visual Studio中看到Int32的定义。 int[]的定义在哪里?

3 个答案:

答案 0 :(得分:8)

对于给定类型T,类型T[]是按组合预定义的。 T[][]等等。

答案 1 :(得分:4)

System.Array

  

Array类是支持数组的语言实现的基类。但是,只有系统和编译器可以从Array类中显式派生。用户应该使用该语言提供的数组结构。


更详细:

  

从.NET Framework 2.0开始,Array类实现System.Collections.Generic.IList,System.Collections.Generic.ICollection和System.Collections.Generic.IEnumerable通用接口。 这些实现在运行时提供给数组,因此文档构建工具不可见。因此,通用接口不会出现在Array类的声明语法中,并且没有可通过将数组转换为通用接口类型(显式接口实现)来访问的接口成员的参考主题。将数组转换为其中一个接口时要注意的关键是添加,插入或删除元素的成员会抛出NotSupportedException。

答案 2 :(得分:2)

C#:

static void Main(string[] args)
        {
            int a = 0;
            int[] b = new int[3];
        }

IL:

.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  //        11 (0xb)
  .maxstack  1
  .locals init ([0] int32 a,
           [1] int32[] b)
  IL_0000:  nop
  IL_0001:  ldc.i4.0
  IL_0002:  stloc.0
  IL_0003:  ldc.i4.3
  IL_0004:  **newarr**     [mscorlib]System.Int32
  IL_0009:  stloc.1
  IL_000a:  ret
}
你可以看到“newarr” 这是关于newarr的细节 http://www.dotnetperls.com/newarr

newarr指令并不是很有趣。但它确实暴露了.NET Framework的一个重要设计决策。矢量(1D阵列)与2D阵列分开。而这些知识可以影响您在课程中选择的类型。