问题描述
当在.NET 4.5中引入 IReadOnlyList< T>
时,我认为这个谜题的缺失部分最终被插入到位:一种通过真正的只读可索引接口,以前我不得不使用我自己的只读接口,并且围绕一切创建包装类。 我期望接口放置在自然的层次结构,理想的情况是:
IEnumerable< T> .GetEnumerator() - > IReadOnlyCollection< T> :IEnumerable< T> .Count - > IReadOnlyList< T> :IReadOnlyCollection< T> 。项目[...] - >的IList< T> :IReadOnlyList< T> .Add(...) .Clear() .Contains(...)(etc)
但事实证明, IList< T>
不会从 IReadOnlyList< T>
。
是否有原因?
解决方案@wb将链接指向新界面IReadOnlyList和IReadOnlyDictionary 在包含答案的评论中:
为什么我们不改变现有接口来扩展只读接口?
它看起来像是一个合理的假设,因为只读接口纯粹是读写接口的子集。不幸的是,它是不兼容的,因为在元数据级别上,每个接口上的每个方法都有自己的插槽(这使得显式接口实现可以工作)。