当我执行int[]
,string[]
,T[]
时 - 这是一个通用数组。数组就像其他所有对象一样。
那么[]的实际开放泛型类型是什么?我认为它只是Array<>
之类的一些语法糖,但我找不到任何类似的东西。
如果你能在Jon Skeet之前以某种方式回答这个问题,可以获得积分。
答案 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类的实际派生。