我应该使用像IEnumerable这样的接口,还是像List <>这样的具体类

Eur*_*lli 4 language-agnostic oop polymorphism

我最近在其他地方表达了我对此的看法*,但我认为值得进一步分析,所以我将其作为自己的问题发布.

假设我需要在程序中创建并传递容器.我可能对一种容器与另一种容器没有强烈的意见,至少在这个阶段,但我选择了一个; 为了论证,我们假设我将使用List <>.

问题是:编写我的方法接受并返回高级接口(例如C#的IEnumerable)会更好吗?或者我应该编写方法来获取并传递我选择的特定容器类.

我应该寻找哪些因素和标准来决定?什么样的程序可以从中受益?计算机语言会影响您的决定吗?性能?程序大小?个人风格?

(这甚至重要吗?)

**(家庭作业:找到它.但是在你寻找我自己之前请在这里发布你的答案,以免偏见你.)*

Rex*_*x M 16

您的方法应始终接受执行其功能所需的最不具体类型.如果您的方法需要枚举,请接受IEnumerable.如果它需要做IList<>特定的事情,根据定义你必须给它一个IList<>.


Mat*_*ton 5

唯一会影响您决定的是您计划如何使用该参数.如果您只是迭代它,请使用IEnumerable<T>.如果您正在访问索引成员(例如var x = list[3])或以任何方式修改列表(例如list.Add(x)),则使用ICollection<T>IList<T>.