通过界面公开收集

时间:2009-10-26 11:30:41

标签: c# collections interface

我是C#的新手。我想知道使用Collections的不同之处。我怀疑,之前可能会问以下问题(如果请给我链接那么好)。

之间有什么区别
IList<int> intCollection = new List<int>();

List<int> intCollection = new List<int>();
  1. 我为什么要通过界面公开我的收藏。
  2. 选择第一种方法只是合成糖吗?
  3. 如果我想使用后面的方法,我将面临哪些不利之处?
  4. 如果相应的接口退出,则应间接初始化所有集合类 使用相应的界面?
  5. 请告诉我通过界面公开收集的例子的好处。

2 个答案:

答案 0 :(得分:5)

使用界面可以在不破坏任何呼叫者的情况下更改后备实施。

您示例中的两行相同,但如果您将IList<T>公开为属性,则可以更改确切返回的内容,而无需调用需要更改的代码。

假设您有一个类,它将List<int>作为属性公开。一切都很好,直到后来当你意识到你需要处理一个项目被添加到这个列表时引发的事件。你不能;您将不得不更改属性类型,因此需要更改调用此属性的所有代码。如果您最初声明IList<int>,则可以继续将具体实现更改为不同的(只要它仍然支持该接口)。

这是由StyleCop提取并在this question中处理的内容。

答案 1 :(得分:2)

使用界面的好处是,它为您提供了未来变更的灵活性。在您的示例中,使用IList将来允许您使用IList的不同实现,并且您只需要更改对象初始值设定项。

另一种情况是,您可能需要与同一界面的许多不同类型进行交互,或者实现完全未知。例如,您需要使用不同排序算法的策略模式,并且您希望根据排序需要使用IList的不同实现。或者您可能正在使用插件模型,并且不知道另一个组件将传递到您的api中的列表类型,但您关心的是它是ILIST遵守IList合同。