我使用的语言是C#。
假设一个对象的方法返回一个List<int>
。如果我们将这个结果分配给IEnumerable<int>
类型的变量,我们是否会受益?
换句话说,
IEnumerable<int> result = list
比好
List<int> result = list
,
其中CCD_ 4是CCD_。
我凭直觉认为,我们不会有任何好处。不过,我想确定一下。因此,我提出这个问题。
缺点是不能使用List<T>
特定的方法。好处是,您将能够更改将列表返回到另一种列表(或set或…)的方法中的实现,因为您唯一需要的是IEnumerable<T>
。
如果您需要Add
之类的方法,则可以使用IList<T>
。
而且,从一个方法返回List<T>
也不是一个好主意。如果您是该方法的实现者,那么您至少应该返回IList<T>
,甚至可能返回IEnumerable<T>
。
通常,在某些情况下,必须强制转换为基类型,请参阅方法签名中的new关键字。
这样做的唯一原因是将列表返回给调用者,这样调用者就无法修改列表*。
*除非呼叫者在列表上执行硬转换
也就是说,使用尽可能少的特定类/接口总是有益的,因为它为代码重用开辟了更多的可能性。
在这种特定情况下,没有理由将本地变量键入为接口。如果对象显式地实现了某个接口,那么您可能想要这样做,但List
和IEnumerable
的情况并非如此。它显式地实现了IEnumerable<T>
。
如果你认为你可能想将其他内容设置为result
,即IEnumerable
而不是List
,那么你可以这样做,但通常情况下,我不会费心做出这样的更改,除非你真的处于这种情况,而不是试图先发制人。作为一个局部变量,而不是一个类型的公共API的一部分,您总是能够在未来的修订中更改变量的类型,而不会产生任何实际的重大后果。