4

当我这样做int[]时 , string[], T[]- 这是一个通用数组。数组只是一个对象,就像其他所有东西一样。

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

如果您能在 Jon Skeet 之前以某种方式回答这个问题,则可以加分。

4

4 回答 4

8

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

于 2011-03-04T22:25:27.217 回答
4

数组比泛型更老。数组从 .net 1 开始可用,而泛型仅在 .net 2 中引入。因此它们不是泛型之上的语法糖。

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

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

于 2011-03-04T22:25:02.993 回答
3

据我所知,不会有开放的泛型类型Array; 它们在泛型出现在 .NET Framework 之前就已经存在。数组只是“奇怪”;该System.Array类型的存在主要是为数组对象提供 OO 功能。只有运行时可以从中派生。

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

于 2011-03-04T22:25:26.683 回答
1

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

于 2011-03-04T22:28:44.287 回答