为什么(返回IList而不是返回List)更好?

36 浏览
0 Comments

为什么(返回IList而不是返回List)更好?

可能是重复的问题:\n当我从我的方法返回一个列表时,可以有两种方式。\n作为一个列表\n私有列表<数据类型>方法名()\n{\n 返回列表\n}\n作为一个IList\n私有IList<数据类型>方法名()\n{\n 返回IList\n}\n据我所知,我们应该将其作为IList返回。有人能解释为什么吗?

0
0 Comments

在返回结果对象时,将其声明为IList而不是List,有以下几个原因:

1. 分离接口和实现:对于调用者来说,你如何实现结果对象并不重要,因此使用接口可以减少耦合。如果你返回IList,可以随时切换到不同的实现,而不会破坏调用者的代码。

解决方法是将返回类型声明为IList而不是具体的实现类List。这样,即使你以后更改了List的实现,调用者的代码也不会受到影响。

public IList GetResults()
{
    // return a List or any other implementation of IList
}

这样,调用者就可以使用这个方法返回的IList对象,而不需要关心具体的实现类。这种做法有助于提高代码的灵活性和可维护性。

0
0 Comments

为什么返回IList而不是返回List更好?

在将一个类通过库暴露给其他人使用时,通常希望通过接口而不是具体实现来进行暴露。这样做有助于以后更改类的实现以使用不同的具体类。在这种情况下,库的用户不需要更新他们的代码,因为接口没有改变。

如果只是在内部使用,可能不太在意,使用List可能是可以的。

问题的解决方法请参考:Why is it considered bad to expose List<T>?

有时候在管理旧答案时会过度进行管理。

0
0 Comments

为什么返回IList比返回List更好?

在这个问题中,我们需要返回一个IList接口的实现,而不是直接返回一个IList。当然,返回一个List也能满足返回IList的方法声明,因为List实现了IList接口。

通常最佳实践是接受参数时使用最通用的类型,并返回最具体的类型。然而,通常程序员不想将自己绑定到List的实现上,并且通常返回IList接口。如果您不希望调用者修改数组,您可以返回一个IEnumerable(在您的IList上调用.AsReadOnly()扩展方法)。

解决这个问题的方法是将返回类型从List更改为IList,并确保返回的对象是IList接口的实现。这样做可以提高代码的灵活性和可维护性。

0