2008-08-27 73 views
5

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

回答

4

就个人而言,我会用一个List <员工>创建在后端的列表,然后使用IList当您返回。当你使用接口时,它可以灵活地改变实现,而不必改变谁在使用你的代码。如果你想坚持一个ArrayList,那将是一个非泛型的IList

1

做这样的事情的最好方法就是返回一个列表,最好使用泛型,所以它会是List <Employee>。

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

0

你方法的返回类型应该是IList<Employee>

这意味着您的方法的调用者可以使用IList提供的任何东西,但不能使用特定于ArrayList的东西。然后,如果您觉得LinkedListYourCustomSuperDuperList可以提供更好的性能或其他优势,您可以在自己的方法中安全地使用它,而不是使用它来调用它。

这大概接口101 ;-)

0

接口是执行和落实的用户之间的合同。

通过使用接口,只要它维护用户的合同,就允许实现尽可能多地进行更改。

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

0

你不会说你在说什么语言,但是在某些.NETish中,那么返回一个IList比List或甚至ArrayList没有更多的工作,尽管仅仅提到那个过时的类会让我认为你不是在谈论.NET。

2

@杰森

你不妨返回IList的<>因为数组实际上实现了这个接口。

1

如果您所做的只是迭代列表,您可以定义一个方法,将列表返回为IEnumerable(用于.NET)。

通过返回提供所需功能的接口,如果某些新的集合类型在将来会更好/更快/更好地匹配应用程序,只要它仍然实现IEnumerable,则可以完全重写你的方法,使用里面的新类型,而不改变任何调用它的代码。

0

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

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

1

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

0

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

你有this article

1

我的前提是它更好地返回的接口不同意该推理。我的理由是,你想最大限度地发挥给定的代码块的有用性。

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

但是,返回值的作用相反。当你返回一个IEnumerable时,你可以做的唯一事情就是列举它。如果你有一个方便的List并返回,那么调用你的函数的代码也可以很容易地做许多其他的事情,比如获得一个计数。尽管如此,我坚信那些建议你远离ArrayList的人应该与他们保持联系。泛型是好得多。