考虑一下这个例子:
IList<string> _lstColl = new[] { "Alex", "Sam", "Gates", "Riaz" };
我可以初始化它 为:
string[] _stringBag = new[] { "Alex", "Sam", "Gates", "Riaz" };
在这里使用界面有什么好处?
答案 0 :(得分:5)
优点是它向读者表明你没有使用它碰巧是一个数组的事实。我倾向于将局部变量声明为包含我需要的所有功能的最常规类型。例如,我会这样做:
using (TextReader reader = File.OpenText(...))
而不是指定StreamReader
。
很少非常重要,但确实可以更轻松地更改实施细节。例如,假设我们想要更改您的示例以使用List<T>
而不是数组。
你可以改变这个:
IList<string> _lstColl = new[] { "Alex", "Sam", "Gates", "Riaz" };
到此:
IList<string> _lstColl = new List<string> { "Alex", "Sam", "Gates", "Riaz" };
并且知道它仍然会编译。一些语义可能不一样,所以你仍然需要小心 - 但至少你知道它不会使用任何特定于数组的方法。
答案 1 :(得分:2)
这是generics的示例,您正在使用字符串数据类型创建IList。
泛型介绍.NET 框架类型的概念 参数,使其成为可能 设计类和推迟的方法 一种或多种类型的规范 直到声明类或方法 并由客户端代码实例化。对于 例如,通过使用泛型类型 参数T你可以写一个 其他客户端代码可以使用的类 不会产生成本或风险 运行时强制转换或装箱操作。
在这里阅读更多内容
答案 2 :(得分:2)
没有优点或缺点。如果您的代码需要IList,那么请给它一个。如果你的代码需要一个数组,那就给它一个。
答案 3 :(得分:1)
我真的不明白数组实现IList的原因。当您调用Add时,它会抛出异常。 数组没有IList语义,因为它不可调整大小。这就是为什么我避免将数组作为IList 。如果我需要一个列表,我会这样写:
IList<string> _lstColl = new List<string>() { "Alex", "Sam", "Gates", "Riaz" };
(PS:使用标准框架的集合接口存在很多问题,比如缺少方法甚至缺少接口。当你使用集合接口时,像往常一样使用NHibernate时,你会认识到它们有时候设计得很糟糕。我认为这个接口的开发人员似乎没有使用它们。只是我的观点。)