What is the open generic type of the array []?
When I do int[]
, string[]
, T[]
- this is a generic array. An array is just an object like everything else.
So what is the actual open generic type of []? I assume it is just some syntactic sugar over something like Array<>
but I haven't been able to find anything of the sort.
Bonus points if you can somehow answer this before Jon Skeet.
It's just System.Array; it isn't generic. See here for a brief discussion: http://blogs.msdn.com/b/ericlippert/archive/2007/10/17/covariance-and-contravariance-in-c-part-two-array-covariance.aspx
Arrays are older that generics. Arrays are available since .net 1, and generics were only introduced in .net 2. So they are no syntax sugar on top of generics.
Instead they derive from Array
and use a lot of runtime magic to work.
In addition arrays of a reference type support some variance patterns not supported by generics. If I recall correctly this was done for Java compatibility.
Far as I know, there wouldn't be an open generic type of Array
; they existed before generics did in the .NET Framework. Arrays are just "weird"; the System.Array
type exists mainly to provide O-O functionality to array objects. Only the runtime can derive from it.
HOWEVER, System.Array
implements the generic IList<T>
, which enforces the indexer. If you want an abstract that is strongly typed and will accept a strongly-typed array, use IList.
It's not just syntactic sugar, it's an actual derivation of the System.Array class.
精彩评论