为什么 List<T>
实现了 IReadOnlyList<T>
,即使 List<T>
并不是只读的?
List
这样的东西并进行更改,但是它不应该这样做。) List
或 IList
。List<T>
是IReadOnlyList<T>
的子类型(我不确定C#类型是否实际反映了这一点)。此类型允许您指定特定代码不会对列表进行任何更改。int
传递给接受const int
的方法,或将int
传递给期望volatile int
的方法。比所需更严格地处理参数并不会有害。
IList<T>
是一个IReadonLyList<T>
,只是它可以被用作其中一个。 - itsme86IReadOnlyList
永远不会改变,也就是说它是不可变的,而不是说它是对可变列表的引用,只是不能使用该引用进行突变(无需转换)。由于这种混淆,实际上对于List
实现IReadOnlyList
的决定存在一些阻力。 - ServyIAccessableByIndexList
的东西,虽然那也不是很好,但它不会让你误以为集合必须是只读的。 - MagnusIWritingUtencil
的类Finger
(只能在沙子、雪地或流血时使用?),但我不认为手指本质上是一种写作工具;只是它可以被用作其中之一。 - itsme86IReadOnlyList
是个不太准确的名称。IReadableList
应该是更好的选择。 我猜这就是为什么它很少被使用的原因。 - Cory NelsonAccount
对象的Balance
属性。该属性是只读的,因为它不能通过属性本身进行更改(您不能执行account.Balance = 1000000
)。但是该属性可以通过其他机制进行更改,例如account.MakeDeposit(1000000)
。 - Darryl