数组[]的开放泛型类型是什么?

时间:2011-03-04 22:22:54

标签: c# arrays generics open-generics

当我执行int[]string[]T[]时 - 这是一个通用数组。数组就像其他所有对象一样。

那么[]的实际开放泛型类型是什么?我认为它只是Array<>之类的一些语法糖,但我找不到任何类似的东西。

如果你能在Jon Skeet之前以某种方式回答这个问题,可以获得积分。

4 个答案:

答案 0 :(得分:7)

这只是System.Array;它不是通用的。请参阅此处以获得简短的讨论:http://blogs.msdn.com/b/ericlippert/archive/2007/10/17/covariance-and-contravariance-in-c-part-two-array-covariance.aspx

答案 1 :(得分:4)

阵列比泛型更老。数组从.net 1开始可用,而泛型只在.net 2中引入。所以它们在泛型上没有语法糖。

相反,它们派生自Array,并使用大量的运行时魔法来工作。

此外,引用类型的数组支持泛型不支持的一些方差模式。如果我没记错的话,这是为了兼容Java。

答案 2 :(得分:3)

据我所知,不存在开放的通用类型Array;它们存在于.NET Framework中的泛型之前。数组只是“怪异”; System.Array类型主要用于为数组对象提供O-O功能。只有运行时可以从中派生出来。

但是,System.Array实现了通用IList<T>,它强制执行索引器。如果您想要一个强类型的抽象并且接受强类型数组,请使用IList。

答案 3 :(得分:1)

这不仅仅是语法糖,它是System.Array类的实际派生。