了解界面
我有一个类方法,该方法返回可以迭代的雇员列表。返回列表的最佳方法是什么?通常,我只返回一个ArrayList。但是,据我了解,接口更适合此类操作。哪个将是最佳使用界面?另外,为什么返回接口而不是实现(比如ArrayList对象)更好呢?对我来说,似乎还有很多工作要做。
解决方案
回答
就个人而言,我将使用List <Employee>在后端创建列表,然后在返回时使用IList。使用接口时,它使我们可以灵活地更改实现,而不必更改使用代码的人员。如果我们想坚持使用ArrayList,那将是一个非通用的IList。
回答
最好的方法是返回一个List,就像我们所说的那样,最好使用泛型,因此它将是List<Employee
>。
返回List而不是ArrayList意味着,如果以后我们决定使用LinkedList,则无需更改任何代码,除了创建对象的起始位置(即,调用" new数组列表())"。
回答
方法的返回类型应为IList <Employee>。
这意味着方法的调用者可以使用IList提供的任何东西,但不能使用特定于ArrayList的东西。然后,如果我们在某个时候觉得LinkedList
或者YourCustomSuperDuperList
提供了更好的性能或者其他优点,则可以在方法中安全地使用它,而不用调用它。
那大概是接口101. ;-)
回答
接口是实现与实现的用户之间的契约。
通过使用接口,我们可以允许实现更改,只要它与用户保持合同即可。
它还允许多个实现使用同一接口,以便用户可以重用与该接口交互的代码。
回答
我们不需要说什么语言,但是在某种.NETish中,返回IList的工作比List甚至ArrayList都要多,尽管仅提及过时的类就使我觉得我们不谈论.NET。
回答
@杰森
我们最好返回IList <>,因为数组实际上实现了此接口。
回答
如果我们要做的只是遍历列表,则可以定义一个方法以将列表返回为IEnumerable(对于.NET)。
通过返回仅提供所需功能的接口,如果将来会出现一些更好/更快/更适合应用程序的新集合类型,只要它仍然实现IEnumerable,我们就可以使用里面的新类型,而无需更改任何调用它的代码。
回答
接口本质上是一个合同,它使一个类具有某些方法或者属性。对接口进行编程,而不是直接实现,这样可以实现更具动态性和可管理性的代码,因为只要仍然保留"合同",就可以完全调换实现。
在我们描述的情况下,传递接口不会给我们带来特殊优势,如果是我,我将传递具有通用类型的ArrayList或者传递Array本身:list.toArray()
回答
有什么理由需要订购收藏品吗?为什么不简单地返回一个" IEnumerable <Employee>"呢?如果我们以后想要某种其他形式的存储(例如袋,套装或者树或者其他什么东西),那么合同将保持原样,这是最低要求。
回答
实际上,如果那是一个框架,那么我们不应该返回List,至少在没有思考的情况下,建议使用的推荐类是Collection。 List类以服务器可扩展性问题为代价提高了性能。这实际上是FXCop规则。
我们在本文中有这样的理由
回答
我不同意这样的前提,那就是最好返回一个接口。我的理由是我们想最大化给定代码块公开的用途。
考虑到这一点,接口可用于接受项目作为参数。如果函数参数要求使用数组或者ArrayList,则这是我们唯一可以传递给它的东西。如果函数参数要求IEnumerable,它将接受其中一个以及许多其他对象。比较有用
但是,返回值却相反。当我们返回IEnumerable时,我们唯一可以做的就是枚举它。如果我们有一个方便的List并返回该List,那么调用函数的代码也可以轻松地完成许多其他事情,例如获得计数。
但是,我与那些劝告我们脱离ArrayList的人团结一致。泛型好得多。