這個問題在這里已經有了答案: 何時使用介面型別的變數而不是具體型別 5 個答案 5 天前關閉。
我將用這個例子解釋我的問題:
ICollection<Employee> listOfEmployee = new List<Employee>();
//listOfEmployee = Some code;
在 C# 中,List<T>
繼承自IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T>
介面。所以這意味著List<T>
擁有這些介面所擁有的所有方法。
在上面的這個例子中,為什么我們有時會使用
ICollection<Employee> listOfEmployee = new List<Employee>();
或者
IEnumerable<Employee> listOfEmployee = new List<Employee>();
等等...而不是
List<Employee> listOfEmployee = new List<Employee>();
這個?有什么性能上的好處嗎?
uj5u.com熱心網友回復:
一般來說,最好使用您需要的最簡單的型別。如果您決定稍后更改更高級別的型別,從長遠來看它會更加靈活。例如,這無需更改您的代碼即可作業:
ICollection<Employee> listOfEmployee = new List<Employee>();
...
listOfEmployee = new HashSet<Employee>();
如果您要使用像第二個示例那樣的最高級別的類:
List<Employee> listOfEmployee = new List<Employee>();
...
listOfEmployee = new HashSet<Employee>();
即使您只使用 ICollection<> 介面中的方法,這也會引發編譯時錯誤。由于您不需要訪問您在 List<> 中獲得的所有高級功能,因此使用 ICollection<> 的這種方式更易于維護。
編輯:這也是指示您計劃對物件使用哪種型別的操作的好方法。如果您只打算遍歷串列,那么可能 IEnumerable 是要走的路。但是,如果您想稍后添加和插入物件,那么您可以在那里使用 List
uj5u.com熱心網友回復:
我建議您閱讀為什么我們使用介面與具體型別。在您的示例中,介面傳達了消費者可以對集合執行的操作型別等。IEnumerable
表示專案只能被迭代,其中 asICollection
允許在集合中插入和洗掉專案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/483356.html