【发布时间】:2014-03-08 07:02:46
【问题描述】:
为什么List<T> 实现IReadOnlyList<T> 即使List<T> 不是只读的?
【问题讨论】:
-
我认为您混淆了派生和实现的基础。类派生自基类,但它们实现接口。牢记这一点解释了这两个概念之间的差异。你不是说
IList<T>是IReadonLyList<T>,只是说它可以作为一个。 -
@itsme86 使用他们所做的设计实际上是一个非常困难的设计决策。有人可能合理地期望
IReadOnlyList将永远改变,也就是说它是不可变的,而不是说它是对可变 使用该引用(不进行强制转换)根本无法改变的列表。由于这种混淆,实际上对List实施IReadOnlyList的决定存在一些阻力。 -
好问题。在我看来,这是一个糟糕的界面命名。它应该被称为
IAccessableByIndexList之类的东西,虽然这也不是很好,但它不会欺骗您认为该集合必须是只读的。 -
这似乎很愚蠢。你可以有一个类
Finger实现了一个接口IWritingUtencil(它只能在沙子、雪地、流血时工作?),但我认为手指不一定是书写工具;只是它可以作为一个。 -
我一直认为
IReadOnlyList是一个不幸的误称。IReadableList将是首选。我想这就是它很少被使用的原因。