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

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

a的类型是System.Int32结构。b的类型是int[]

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

4

3 回答 3

8

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

于 2013-03-20T00:28:36.690 回答
4

系统数组

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


更详细:

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

于 2013-03-20T00:46:28.440 回答
2

C#:

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

伊利诺伊:

.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 的一个重要设计决策。向量(一维数组)与二维数组是分开的。而这些知识会影响你在程序中选择的类型。

于 2013-03-20T00:37:24.830 回答