当我这样做int[]
时 , string[]
, T[]
- 这是一个通用数组。数组只是一个对象,就像其他所有东西一样。
那么 [] 的实际开放泛型类型是什么?我认为这只是一些语法糖,Array<>
但我找不到任何类似的东西。
如果您能在 Jon Skeet 之前以某种方式回答这个问题,则可以加分。
当我这样做int[]
时 , string[]
, T[]
- 这是一个通用数组。数组只是一个对象,就像其他所有东西一样。
那么 [] 的实际开放泛型类型是什么?我认为这只是一些语法糖,Array<>
但我找不到任何类似的东西。
如果您能在 Jon Skeet 之前以某种方式回答这个问题,则可以加分。
这只是 System.Array; 它不是通用的。请参阅此处进行简短讨论:http: //blogs.msdn.com/b/ericlippert/archive/2007/10/17/covariance-and-contravariance-in-c-part-two-array-covariance.aspx
数组比泛型更老。数组从 .net 1 开始可用,而泛型仅在 .net 2 中引入。因此它们不是泛型之上的语法糖。
相反,它们源自Array
并使用大量运行时魔法来工作。
此外,引用类型的数组支持一些泛型不支持的变化模式。如果我没记错的话,这是为了 Java 兼容性。
据我所知,不会有开放的泛型类型Array
; 它们在泛型出现在 .NET Framework 之前就已经存在。数组只是“奇怪”;该System.Array
类型的存在主要是为数组对象提供 OO 功能。只有运行时可以从中派生。
但是,System.Array
实现了 generic IList<T>
,它强制执行索引器。如果你想要一个强类型的抽象并且接受一个强类型的数组,使用 IList。
它不仅仅是语法糖,它是 System.Array 类的实际派生。