我使用的语言是C#。
假设对象的方法返回List<int>
。如果我们将此结果分配给IEnumerable<int>
类型的变量,我们会从中受益吗?
换句话说
IEnumerable<int> result = list
优于
List<int> result = list
,
其中list
是List<int>
。
我直觉地认为我们不会从中受益。但是,我想确定一下。因此我问这个。
答案 0 :(得分:1)
缺点是您将无法使用List<T>
特定方法。
好处是您可以将返回列表的方法中的实现更改为另一种列表(或设置或...),因为您唯一需要的是IEnumerable<T>
。
如果您需要IList<T>
等方法,那么妥协为Add
。
而且,从方法返回List<T>
不是一个好主意。如果您是该方法的实施者,那么您至少应该返回IList<T>
或甚至IEnumerable<T>
。
通常情况下,必须强制转换为基本类型,请参阅new keyword in method signature。
答案 1 :(得分:0)
您执行此操作的唯一原因是将列表返回给调用方,这样调用方将无法修改列表*。
* 除非调用者在列表上执行了强制转换
那就是说 - 使用最不具体的类/接口总是有益的 - 因为它为代码重用开辟了更多的可能性。
答案 2 :(得分:0)
在这种特定情况下,没有理由将局部变量键入为接口。如果对象明确地实现了某个界面,那么您可能希望这样做,但List
和IEnumerable
不是这种情况。它明确地实现了IEnumerable<T>
。
如果您认为您可能希望将其他内容设置为result
IEnumerable
而不是List
,那么您可以这样做,但通常除非你真的处于那种情况,否则我不会费心做出这样的改变,而不是试图在预先做到这一点。作为局部变量,而不是说某种类型的公共API的一部分,您始终能够在未来的版本中更改变量的类型,而不会产生任何实际的重大后果。