c#-数组从何处继承(即int[])

c#-数组从何处继承(即int[]),c#,.net,arrays,C#,.net,Arrays,在创建数组(如int[])时,是否继承了任何内容?我认为它可能继承自System.Array,但在查看编译后的CIL后,它似乎不是这样 我认为它可能继承自System.Array或类似的东西,因为您可以调用方法并访问数组上的属性 即 所有数组都派生自。来自一个(公认的古代): 所有数组类型都是从System.array隐式派生的,System.array本身是从System.Object派生的。这意味着所有数组都是在托管堆上分配的引用类型,并且应用程序的变量包含对数组的引用,而不是对数组本身的引

在创建数组(如int[])时,是否继承了任何内容?我认为它可能继承自System.Array,但在查看编译后的CIL后,它似乎不是这样

我认为它可能继承自System.Array或类似的东西,因为您可以调用方法并访问数组上的属性

所有数组都派生自。来自一个(公认的古代):

所有数组类型都是从System.array隐式派生的,System.array本身是从System.Object派生的。这意味着所有数组都是在托管堆上分配的引用类型,并且应用程序的变量包含对数组的引用,而不是对数组本身的引用

根据第19.1.1节(重点矿山):

类型系统。数组是所有数组类型的抽象基类型。隐式引用转换 (§13.1.4)存在于从任何数组类型到System.array以及由 System.Array。System.Array和任何接口都存在显式引用转换(§13.2.3) 由System.Array实现的类型转换为任何数组类型System.Array本身不是数组类型。相当地 它是派生所有数组类型的类类型


数组确实继承自
System.array
。它是泛型类型的一种特殊化,有点像
System.Array
,除了运行时将数组视为“特殊”之外——它们是.NET 1.0中存在的泛型的一种特殊情况,而在.NET 2.0中引入了“通用”泛型之前


编辑:刚刚使用反射检查了我的答案,看起来数组的基本类型实际上是
System.array
。更正。

我发现有趣的一件事是数组还实现了
ICollection

int[]foo=newint[]{};
i采集条=foo;
//因此,数组将使用ICollection重载来推断类型
IEnumerable Foo(函数条);/。计数()
i集合Foo(功能条);/。计数
int[] arr = {1, 2};
arr.Initialize();
arr.Length;
int[] foo = new int[]{ };
ICollection<int> bar = foo;

// So, arrays would have type infered to use ICollection<> overload
IEnumerable<T> Foo<T>(Func<IEnumerable<T>> bar); // .Count()
ICollection<T> Foo<T>(Func<ICollection<T>> bar); // .Count