當我返回從我的方法的名單,我可以在2路做。 作爲一個列表
Private List<datatype> MethodName()
{
Return List
}
這樣的IList
Private IList<datatype> MethodName()
{
Return IList
}
當我聽說我們應該回到它作爲一個IList的。有人可以解釋誰是誰?
當我返回從我的方法的名單,我可以在2路做。 作爲一個列表
Private List<datatype> MethodName()
{
Return List
}
這樣的IList
Private IList<datatype> MethodName()
{
Return IList
}
當我聽說我們應該回到它作爲一個IList的。有人可以解釋誰是誰?
它將接口從實現中分離出來。調用者如何實現結果對象並不重要,因此使用接口會減少耦合。如果你返回IList
,你可以隨時切換到不同的實現,而不會破壞調用者的代碼。
如果您是通過其他人會使用, 你一般要通過接口而不是具體 實現揭露它庫暴露你的類。如果您稍後決定更改類的 實現以使用不同的具體類,這將有所幫助。 在這種情況下,您的庫的用戶將不需要更新他們的代碼 ,因爲界面不會更改。
如果您只是在內部使用它,您可能不會太在意,並且使用List的 可能沒問題。
如果回到剛剛名單。那麼函數的調用者必須將返回值放入類List的實例中。
當您返回一個IList時,調用者可以將它放入任何實現該接口的實例中。假設調用者已經實現了一種支持某種時髦排序的實現,或者他們已經實現了將列表直接映射到數據庫表的實現。
這是關於接收機實現列表的自由。
這就是錯的。如果您返回列表,接收者可以自由地將其作爲List或IList接受。如果你返回IList,那麼自由就消失了。 – Foxfire 2011-02-07 10:49:43
您不能返回IList
- 您需要返回該接口的實現(即List
)。當然,返回'List'將滿足您返回IList
的方法聲明,因爲List
實現了IList
。
通常最佳做法是接受最通用的類型的參數並返回最具體的。然而,傳統的程序員傾向於不想將自己綁定到List
實現上,並且通常返回接口IList
。如果您不希望呼叫者修改陣列(請在您的IList
上調用.AsReadOnly()
擴展方法),您可能會返回IEnumerable
。
返回接口允許您稍後更改您的實現,從而減少耦合。
但是,當返回一個對象時,這通常沒什麼實際的關注。這在接受對象時更加相關(例如作爲函數參數)。
有時候你會在管理舊的答案時走遠... – Scoregraphic 2014-11-28 11:16:31