为什么List <t>实现了IReadOnlyList <t>接口?</t> </t>

时间:2014-02-10 19:11:24

标签: c# .net

为什么List<T>实现IReadOnlyList<T>即使List<T>不是只读的呢?

2 个答案:

答案 0 :(得分:8)

它允许您公开该列表的只读“代理”,以便您可以在其他地方传递该接口引用,并且知道代码不会改变列表。 (从技术上讲,它可以尝试将其强制转换为List并改变它,但不应这样做。)

它还允许一种方法明确指出虽然它需要接受一个列表,但它不会改变它。

拥有只读接口还允许该接口具有协变性,与ListIList不同。

答案 1 :(得分:1)

你可以从子类型的角度考虑这个问题。如果不修改常规列表,则常规列表可以是只读列表,即List<T>IReadOnlyList<T>的子类型(我不确定C#类型是否实际承担了这一点)。键入允许您指定特定代码段不会对列表进行任何更改。

此类事情的另一个例子是在C中,您可以将int传递给接受const int或传递int的方法,该方法需要{ {1}}。比所需要的更严格地对待这个论点是没有害处的。