通过界面公开收集

use*_*546 0 c# collections interface

我是C#的新手.我想知道使用Collections的不同之处.我怀疑,之前可能会问以下问题(如果这样,请告诉我链接).

有什么区别

IList<int> intCollection = new List<int>();
Run Code Online (Sandbox Code Playgroud)

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

Gra*_*ark 5

使用界面可以在不破坏任何调用者的情况下更改后备实现.

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

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

这是StyleCop选择并在这个问题中处理的内容.