数组的开放generics类型是什么?
当我执行int[]
, string[]
, T[]
– 这是一个通用数组。 数组就像其他所有对象一样。
那么[]的实际开放generics类型是什么? 我假设它只是像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
数组比generics更老。 从.net 1开始就可以使用数组,并且只在.net 2中引入了generics。因此它们在generics上没有语法糖。
相反,它们派生自Array
并使用大量的运行时魔法来工作。
此外,引用类型的数组支持generics不支持的一些方差模式。 如果我没记错的话,这是为了兼容Java。
据我所知,不会有一个开放的通用类型的Array
; 它们存在于.NET Framework中的generics之前。 数组只是“怪异”; System.Array
类型主要用于为数组对象提供OOfunction。 只有运行时可以从中派生出来。
但是, System.Array
实现了通用IList
,它强制执行索引器。 如果您想要一个强类型的抽象并且接受强类型数组,请使用IList。
它不仅仅是语法糖,它是System.Array类的实际派生。