C#中List與IList的區別
List
IList
下面談談它們之間的區別:
首先,List
具體來說,IList 泛型介面是 違規廣告ection 泛型介面的子代,並且是所有泛型列表的基介面。它僅僅是所有泛型型別的介面,並沒有太多方法可以方便實用,如果僅僅是作為集合資料的承載體,那麼使用IList
1、當你只想使用介面的方法時,ILis<>這種方式比較好.他不獲取實現這個介面的類的其他方法和欄位,有效的節省空間.
2、IList <>是個介面,定義了一些操作方法這些方法要你自己去實現
List <>是泛型類,它已經實現了IList <>定義的那些方法
IList
List
這兩行程式碼,從操作上來看,實際上都是建立了一個List
只是用於儲存這個操作的返回值變數型別不一樣而已。
那麼,我們可以這麼理解,這兩行程式碼的目的不一樣。
List
是想建立一個List
而
IList
只是想建立一個基於介面IList
再舉一個例子,比如你要實現一個集合類,但是你認為新增的時候要做一下判斷,不能重複,你可以這樣做:
//方法1:
public class MyCollection1 : List
{
public new void Add(MyItem item)
{
if (this.Contains(item)) return;
base.Add(item);
}
}
//方法2:
public class MyCollection2 : IList
{
private List
public void Add(MyItem item)
{
if (this.Contains(item)) return;
base.Add(item);
}
//實現n多的方法後,附帶的,有個Add方法,實現即可,實現方法略
}
如果是從List繼承而來,那我如果這樣寫,就能跳過檢查了。但是不會呼叫你寫的Add方法,而是呼叫List的Add方法。
MyCollection1 mc1 = new MyCollection1();
.....
System.Collection.IList listData = mc1;
listData.Add(listData[0]);
這樣就不會執行你寫的檢查程式碼。但如果用下面方法,則會執行你寫的Add方法:
MyCollection2 mc2 = new MyCollection2();
.....
System.Collection.IList listData = mc2;
listData.Add(listData[0]);
總之,正如那些高手說的:
介面實現鬆耦合...有利於系統的維護與重構...優化系統流程...
鼓勵使用介面
這樣可以實現功能和具體實現的分離
實現介面分離的原則
不是看實際需要用的
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-624339/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- c#中Array,ArrayList 與List<T>的區別、共性與轉換C#
- java中Map,List與Set的區別Java
- C# 中List中的Count和Count(),有什麼區別C#
- html中list-style-type與list-style的區別HTML
- list-style與list-style-type的區別
- .net與C#的區別C#
- c#與java的區別C#Java
- int[] 、 list<int> 、 list<int>[] 的區別
- java中list、set和map 的區別(轉)Java
- WPF SelectedItemCollection convert to IList and List, such as Datagrid SelectedItems
- Entity Framework中使用IEnumerable<T>、IQueryable<T>及IList<T>的區別Framework
- List、Set、Map的區別
- set、List、map的區別
- C#陣列與集合的區別C#陣列
- C#中Hashtable和HashMap的區別C#HashMap
- C#中ref和out的區別C#
- Javascript中“==”與“===”的區別JavaScript
- js中“==”與"==="的區別JS
- IL角度理解C#中欄位,屬性與方法的區別C#
- C#中抽象方法與虛方法的區別詳解及示例C#抽象
- C# 結構體與類的區別C#結構體
- 【轉】C#中virtual和abstract的區別C#
- C#中堆和堆疊的區別C#
- list與Set、Map區別及適用場景
- Java中(==)與equals的區別Java
- numpy中dot與*的區別
- Python中 ‘==‘ 與‘is‘的區別Python
- 一句話說明白C#中的new與override的區別C#IDE
- list和tuple元組的區別
- java字串“==”與“equals”的差異及與c#的區別Java字串C#
- C# 中 Struct 和 Class 的區別總結C#Struct
- C# 中的 == 和 equals()有什麼區別?C#
- C#中的屬性和欄位的區別C#
- java原始碼研究--List中的set和add方法區別Java原始碼
- js中!和!!的區別與用法JS
- js中 let 與 var 的區別JS
- HTTP中GET與POST的區別HTTP
- ruby中的\z與\Z區別