T[]实现了IList<T>吗?

4

我有一个类构造函数,它接受一个IList<IElement>作为参数。

当创建该类的新实例时,我可以传递IElement[]而不是IList<IElement>,这怎么可能?


2
请参考:https://dev59.com/3Wgu5IYBdhLWcg3wrIuR - Adam Houldsworth
1
“这是如何和为什么可能的?” - 你应该因为标题党或措辞不当而获得徽章。 - makerofthings7
1
@RoyiNamir.. 但这不是关于数组协变性的问题。 - dcastro
@RoyiNamir 你把那句话断章取义了。该行并不是指 T[] 实现了 IList<T> 这一事实。它指的是数组如何通过接口实现协变性和需要通过这些接口维护协变性等完全独立但相关的属性。 - Servy
我会再读一遍。 - Royi Namir
显示剩余4条评论
1个回答

10

具有元素类型 T 的数组源自于 IList<T>

这在 mscorlib.dll 的元数据中不可见,但继承关系在 CLR 中运行时创建。C# 和 CLR 知道数组类型并对其进行特殊处理。


2
它确实不会(https://dev59.com/3Wgu5IYBdhLWcg3wrIuR#11164210);-) - Tim Schmelter
@TimSchmelter确实太对了! ...最终会的;-) - Adam Houldsworth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接