2008-08-27 36 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的人應該與他們保持聯繫。泛型是好得多。