有人能向我解释一下为什么我想在c#中使用IList而不是List吗?
相关问题:为什么公开List<T>被认为是不好的
有人能向我解释一下为什么我想在c#中使用IList而不是List吗?
相关问题:为什么公开List<T>被认为是不好的
当前回答
接口是一种承诺(或契约)。
承诺总是这样,越小越好。
其他回答
使用接口而不是实现的最重要情况是API的参数。如果API接受List参数,那么使用它的任何人都必须使用List。如果参数类型是IList,那么调用者有更多的自由,并且可以使用您从未听说过的类,这些类在编写代码时甚至可能不存在。
不太流行的答案是,程序员喜欢假装他们的软件在世界各地都可以重用,而事实上,大多数项目将由少数人维护,无论界面相关的声音有多好,你都在欺骗自己。
架构宇航员。你编写自己的IList,为。net框架中已经存在的IList添加任何东西的机会是如此渺茫,以至于它只是理论上的“最佳实践”。
很明显,如果你被问到在面试中使用什么,你会说IList,微笑,两个人看起来都为自己的聪明感到高兴。或者对于一个面向公众的API, IList。希望你明白我的意思。
You can look at this argument from several angles including the one of a purely OO approach which says to program against an Interface not an implementation. With this thought, using IList follows the same principal as passing around and using Interfaces that you define from scratch. I also believe in the scalability and flexibility factors provided by an Interface in general. If a class implmenting IList<T> needs to be extended or changed, the consuming code does not have to change; it knows what the IList Interface contract adheres to. However using a concrete implementation and List<T> on a class that changes, could cause the calling code to need to be changed as well. This is because a class adhering to IList<T> guarantees a certain behavior that is not guaranteed by a concrete type using List<T>.
此外,还可以在类上修改List<T>的默认实现,例如为.Add、.Remove或任何其他IList方法实现IList<T>,为开发人员提供了很大的灵活性和能力,否则由List<T>预定义
如果您通过其他人将使用的库来公开类,则通常希望通过接口而不是具体实现来公开类。如果您决定稍后更改类的实现以使用不同的具体类,这将有所帮助。在这种情况下,库的用户不需要更新他们的代码,因为接口没有改变。
如果您只是在内部使用它,您可能不会太在意,使用List<T>可能就可以了。
IList<T>是一个接口,所以你可以继承另一个类,仍然实现IList<T>,而继承List<T>阻止你这样做。
例如,如果有一个类a,你的类B继承了它,那么你不能使用List<T>
class A : B, IList<T> { ... }