为什么List<T>
实现IReadOnlyList<T>
即使List<T>
不是只读的呢?
答案 0 :(得分:8)
它允许您公开该列表的只读“代理”,以便您可以在其他地方传递该接口引用,并且知道代码不会改变列表。 (从技术上讲,它可以尝试将其强制转换为List
并改变它,但不应这样做。)
它还允许一种方法明确指出虽然它需要接受一个列表,但它不会改变它。
拥有只读接口还允许该接口具有协变性,与List
或IList
不同。
答案 1 :(得分:1)
你可以从子类型的角度考虑这个问题。如果不修改常规列表,则常规列表可以是只读列表,即List<T>
是IReadOnlyList<T>
的子类型(我不确定C#类型是否实际承担了这一点)。键入允许您指定特定代码段不会对列表进行任何更改。
此类事情的另一个例子是在C中,您可以将int
传递给接受const int
或传递int
的方法,该方法需要{ {1}}。比所需要的更严格地对待这个论点是没有害处的。