为什么返回集合接口而不是具体类型?

Dav*_*vid 16 .net c# interface list return-type

我注意到在其他人的代码中,返回泛型集合的方法几乎总是返回一个接口(例如IEnumerable<T>或者IList<T>),而不是具体的实现.

我有两个相关的问题.首先,为什么(如果有的话)返回接口被认为更好?其次,是否有一个包含Sort方法的集合接口(如同List<T>)?

Jon*_*eet 22

对于第一个问题:如果返回界面,则可以保留更多灵活性.您可以稍后更改实现以返回不同的具体类型.另一方面,它显然给呼叫者更少的信息,因此他们可能无法执行某些操作.(例如,如果你返回List<T>,调用者可以使用ConvertAll等......如果你只声明你返回,他们就不能IList<T>.)在某些情况下,值得指定具体类型; 我通常更喜欢至少从接口开始,并且如果我发现我经常想要使用额外的可用方法,那么只会将具体类型作为返回类型.

其次,没有标准的集合接口有一个Sort方法.另一方面,您可以编写一个扩展方法来排序任何IList<T>.我个人通常喜欢的LINQ OrderBy,OrderByDescending,ThenByThenByDescending方法......他们虽然返回一个新的序列,而不是在地方排序.

  • 辉煌!感谢您对我的问题的明确答复. (2认同)

Mic*_*han 5

来自C# - List或IList

如果您通过其他人将使用的库公开您的类,您通常希望通过接口而不是具体实现来公开它.如果您决定稍后更改类的实现以使用其他具体类,这将有所帮助.在这种情况下,您的库的用户将不需要更新他们的代码,因为接口不会更改.

如果你只是在内部使用它,你可能不在乎,使用List可能没问题.