說說C#中IList與List區別?
他們的區別?
IList &IList11 =new List & ();
List &
List11 =new List & ();
以及使用場景?
@張曉華和 @Pinwheel 基本都闡述清楚了,我來補充一下。
IList是介面無疑,屬於命名空間:System.Collections下,我們來看一下IList的定義:
[ComVisibleAttribute(true)]
public interface IList : ICollection, IEnumerable
IList 泛型介面是 ICollection 介面的子代,並且是所有非泛型列表的基介面。 IList 實現有三種類別:只讀、固定大小、可變大小。無法修改只讀IList。固定大小的 IList 不允許添加或移除元素,但允許修改現有元素。可變大小的 IList 允許添加、移除和修改元素。
有關此介面的泛型版本,請參見 System.Collections.Generic.IList&
說了一堆廢話,接著膜拜List&
[SerializableAttribute]
public class List&
IEnumerable&
對了,List的擴展方法都在System.Linq命名空間裡面,我無聊數了一下,有4000行代碼,大家有空可以慢慢學習,鏈接奉上:System.Linq 命名空間 ()。
最後說一下使用場景:IList:當你建立一個方法,希望可以接收不同類型的參數時,建議用介面,當然你得考慮內部的邏輯是不是可以通過介面解決,如果還要進行數據分析或者別的什麼,就是介面滿足不了的時候,還是老老實實的用會具體的參數。List&暫時說這麼多吧,如果有不對的地方,你打我呀。
List是一個類(Class)。
List&
變數 myFuckList 是一個List&
IList&
List一般是直接拿來用的。IList是List無法滿足你的時候,自己實現一下拿來用的。比如list的sort方法,一般的只支持系統內置類型的排序(int)。如果需要對list中的「姓名」來排序,比如張三,李四。按照筆畫還是拼音就要靠你實現了。其他集合類型同理。我也是小白,看《.NET之美》好像說過這一點。大神請糾正…
// 介面 A, 包含方法: Func_A()
interface A
{
void Func_A();
}
// 介面 B, 包含方法: Func_B()
interface B
{
void Func_B();
}
// 類 Test,實現介面 A、B, 即實現方法: Func_A()、Func_B()
class Test : A, B
{
public void Func_A()
{
Console.WriteLine("implement A");
}
public void Func_B()
{
Console.WriteLine("implement B");
}
}
Test t1 = new Test(); // 創建一個 Test 類型的 Test 對象,該對象基於了 Test 實現的所有介面,即 A、B
t1.Func_A(); // 可調用 Func_A(), 這是對介面 A 的實現
t1.Func_B(); // 也可調用 Func_B(), 這是對介面 B 的實現
A t2 = new Test(); // 創建一個 A 類型的 Test 對象,該對象只基於介面 A
t2.Func_A(); // 因此只能調用對介面 A 的實現方法:Func_A(), 不能調用 Func_B()
B t3 = new Test(); // 創建基於介面 B 的 Test 對象
t2.Func_B(); // 同理只能調用 Func_B(), 不能調用 Func_A()
類似地,由於 List 是一個實現了包括 IList、IReadOnlyList、IReadOnlyCollection 等多個介面的類,相應地,也就實現了這些介面中包含的所有方法。
List&
當你定義了一個 List 類型的對象時,也就獲取了 List 類實現的所有介面的方法;
IList&
而當定義的對象是 IList 類型時,表明該對象只基於介面 IList,也就只能調用 IList 介面中定義的方法(當然包括 IList 本身實現的其它介面的方法)。換句話說,當你只需要使用 IList 介面中規定的方法時,由於不獲取 List 類實現的其他介面的方法,這樣的定義有效地節省了空間。
以上拙見,說得較淺顯,請多指教。如有錯誤,歡迎指正。
List是一個泛型類,你可以理解成一個鏈表,而IList是一個介面,List類型實現了IList介面。你可以實例化類卻不可以實例化介面。
推薦閱讀:
※WPF繪製圖表時,1ms更新一次數據,界面變得特別卡?
※Mono的應用廣泛嗎?
※誰能介紹學習.net core的書籍或者大神寫的blog?
※WPF如何判斷程序是不是第一次啟動?
※微軟的.NET戰略是不是已經失敗了?