那如果是String[]呢?
Array是抽象类,不能直接实例化。从Array.CreateInstance(Type, Length)这个方法来看,可以简单的理解为,Int32[]是Array的泛型实例。
那如果是String[]呢?
那就再创建一个String[]类型
泛型是C# 2才引入的概念 数组在C# 1中就有了
@林J: 肯定不是泛型啦。
@飞扬的尘埃: 看了下Array.CreateInstance(Type, Length)的代码 在最后调用了
// System.Array [SecurityCritical] [MethodImpl(MethodImplOptions.InternalCall)] private unsafe static extern Array InternalCreate(void* elementType, int rank, int* pLengths, int* pLowerBounds);
InternalCreate是CLR提供的方法了 在这一步极有可能创建了一个新类型 继承至Array
@林J: 我肿么感觉,Int32[]这种写法本来就有,而Array只是附加了某些方法啊?
@飞扬的尘埃: 你觉得泛型是如何实现的呢?
在Jit处理泛型的时候,每种List<T>都会生成一段独立的代码,即List<String>和List<Int>是不一样的两段代码,也可以说是不一样的两个类型。放到上面数组层面,就是String[]和Int[]的区别。我就是看了泛型的实现才想到数组可能也是这样来的,那个在定义Int[] numb=new int{1,2,3}时,这里的[]可能只是个关键字一般的存在,在Jit处理的时候,会生成一个System.Int32[]类型。
我也不确定,但是我找不到Int32[]这种类型的代码。而且每当你定义一个新的类型MyClass,你都可以使用MyClass[]这种写法,如果把这里的MyClass[]当成一种类型的话,他是如何产生?
public abstract class Array : ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable { //... }
上面是Array的声明 楼主看看吧