了解接口

时间:2008-08-27 18:12:20

标签: interface

我有类方法,它返回我可以迭代的员工列表。返回列表的最佳方法是什么?通常我只返回一个ArrayList。但是,据我所知,接口更适合这种类型的操作。哪个是最好的界面?另外,为什么返回接口更好,而不是实现(比如ArrayList对象)?对我来说,这似乎还有很多工作要做。

11 个答案:

答案 0 :(得分:4)

就个人而言,我会使用List< Employee>用于在后端创建列表,然后在返回时使用IList。当您使用接口时,它为您提供了更改实现的灵活性,而无需更改使用您的代码的人员。如果你想坚持使用ArrayList,那就是非通用的IList

答案 1 :(得分:2)

@Jason

你也可以退回IList<>因为数组实际上实现了这个接口。

答案 2 :(得分:1)

执行此类操作的最佳方法是返回List,最好是使用泛型,因此它将是List <Employee&gt ;.

返回List而不是ArrayList意味着如果稍后您决定使用LinkedList,则不必更改除创建对象之外的任何代码(即调用) to“new ArrayList())”。

答案 3 :(得分:1)

如果你所做的只是遍历列表,你可以定义一个方法,将列表返回为IEnumerable(对于.NET)。

通过返回提供所需功能的接口,如果将来会出现一些更好/更快/更适合您的应用程序的新集合类型,只要它仍然实现IEnumerable,您就可以完全重写方法,在其中使用新类型,而不更改任何调用它的代码。

答案 4 :(得分:1)

是否有任何理由要求订购?为什么不简单地返回IEnumerable<Employee>?这给出了最低限度的要求 - 如果您以后想要其他形式的存储,例如Bag或Set或Tree等等,您的合同将保持不变。

答案 5 :(得分:1)

我不同意返回界面更好的前提。我的理由是,您希望最大化给定代码块公开的有用性。

考虑到这一点,接口用于接受项目作为参数。如果函数参数调用数组或ArrayList,那么这是唯一可以传递给它的东西。如果函数参数调用IEnumerable,它将接受或者许多其他对象。它更有用

然而,返回值相反。当你返回一个IEnumerable时,你唯一能做的就是枚举它。如果你有一个方便的List并返回,那么调用你的函数的代码也可以很容易地做其他一些事情,比如得到一个计数。

我与那些建议你远离ArrayList的人团结一致。泛型是更好。

答案 6 :(得分:0)

您的方法的返回类型应为IList<Employee>

这意味着您的方法的调用者可以使用IList提供但不能使用ArrayList特定内容的任何内容。然后,如果您觉得LinkedListYourCustomSuperDuperList在某些方面提供了更好的性能或其他优势,您可以在您的方法中安全地使用它,而不是将其调用。

这大致是接口101.; - )

答案 7 :(得分:0)

接口是实现与实现用户之间的契约。

通过使用接口,只要维护用户的合同,您就可以根据需要更改实现。

它还允许多个实现使用相同的接口,以便用户可以重用与接口交互的代码。

答案 8 :(得分:0)

你没有说你正在谈论什么语言,但是在.NETish中,那么返回IList而不是List或者甚至是ArrayList也没有什么工作,尽管仅提到那个过时的类让我觉得你不是在谈论.NET。

答案 9 :(得分:0)

接口本质上是一个类具有某些方法或属性的契约;编程到接口而不是直接实现允许更动态和可管理的代码,因为只要“契约”仍然存在,您就可以完全交换实现。

在你描述的情况下,传递一个接口不会给你一个特别的优势,如果是我,我会传递带有泛型类型的ArrayList,或传递数组本身:list.toArray()

答案 10 :(得分:0)

实际上你不应该返回一个List,如果这是一个框架,至少不是没有想到它,推荐使用的类是Collection。 List类在服务器可扩展性问题上有一些性能改进。这实际上是FXCop规则。

你有this article

的理由