2011-02-07 203 views

回答

2

它將接口從實現中分離出來。調用者如何實現結果對象並不重要,因此使用接口會減少耦合。如果你返回IList,你可以隨時切換到不同的實現,而不會破壞調用者的代碼。

4

如果您是通過其他人會使用, 你一般要通過接口而不是具體 實現揭露它庫暴露你的類。如果您稍後決定更改類的 實現以使用不同的具體類,這將有所幫助。 在這種情況下,您的庫的用戶將不需要更新他們的代碼 ,因爲界面不會更改。

如果您只是在內部使用它,您可能不會太在意,並且使用List的 可能沒問題。

閱讀此問題的解決:Why is it considered bad to expose List<T>?

+0

有時候你會在管理舊的答案時走遠... – Scoregraphic 2014-11-28 11:16:31

-2

如果回到剛剛名單。那麼函數的調用者必須將返回值放入類List的實例中。

當您返回一個IList時,調用者可以將它放入任何實現該接口的實例中。假設調用者已經實現了一種支持某種時髦排序的實現,或者他們已經實現了將列表直接映射到數據庫表的實現。

這是關於接收機實現列表的自由。

+1

這就是錯的。如果您返回列表,接收者可以自由地將其作爲List或IList接受。如果你返回IList,那麼自由就消失了。 – Foxfire 2011-02-07 10:49:43

1

您不能返回IList - 您需要返回該接口的實現(即List)。當然,返回'List'將滿足您返回IList的方法聲明,因爲List實現了IList

通常最佳做法是接受最通用的類型的參數並返回最具體的。然而,傳統的程序員傾向於不想將自己綁定到List實現上,並且通常返回接口IList。如果您不希望呼叫者修改陣列(請在您的IList上調用.AsReadOnly()擴展方法),您可能會返回IEnumerable

0

返回接口允許您稍後更改您的實現,從而減少耦合。

但是,當返回一個對象時,這通常沒什麼實際的關注。這在接受對象時更加相關(例如作爲函數參數)。

相關問題