IList和List根本区别

dfcj1010 2011-07-22 02:21:34
IList<T>
List<T>
IList<T> list=new List<T>();
知道IList是接口,List是一个实现IList的类,List可以隐式转换为IList
但是感觉这样还没有真正理解他们的区别,心里面还有疑问:
1、List实现了IList的哪些方法?是实体类T里面的字段?
2、IList既然是个接口,它为什么可以充当数据源?
3、IList<T> list=new List<T>();这样转化的用意是什么?
...全文
5044 100 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
100 条回复
切换为时间正序
请发表友善的回复…
发表回复
overkdg 2014-01-14
  • 打赏
  • 举报
回复
引用 33 楼 pinyu 的回复:
我有些想起我们小学学的文书格式。比如,请假条有一个固定格式: 起行是称呼,然后是正文,最后是落款和日期。 至于向谁请假,请假内容是什么,谁请的假都没有指定,因为那必须到最终请假人来决定。 这就好比请假条的固定格式就是接口,真正具体的请假条就是实现的类。 当然这个比喻不是太恰当,因为这个比喻最恰当的是来比喻类和实例更贴切。 再举一个例子,所有人都知道,毛笔是用来写字的,扫帚是来扫地的,但又有谁规定了扫帚就不能写字了? 我现在需要一个只要能写字都可以的工具。 比如WriteSomthing(Tool) 于是就有一个问题了,这个Tool到底是毛笔呢还是扫帚??? 显然毛笔和扫帚不是一类的东西,也不太好用继承的关系来做,如果可以的话,到底是毛笔继承扫帚还是扫帚继承毛笔呢?抑或是扫帚和毛笔共同继承一个有毛的东西?那没毛的扫帚咋办呢? 因此,最好的办法就是提取他们共有的功能出来——写作为一个合约,这个合约只是规定你需要有这个功能,至于你怎么去实现这个功能我不管,但是你的提供这个功能,那么这个合约就叫接口了,因此可以设计一个IWrite的接口,这个接口规定必须实现的一个功能是Write。 现在好了,Tool就可以指定为IWrite,意思就是只要实现了IWrite指定的功能一切工具管你是毛笔、扫帚还是树枝石头啥的,都可以拿来用。 因此WriteSomething(IWrite Tool)就是我们想要的东西 不过还有需要注意的一点,传递进来的参数必须是实现了IWrite功能的任意类的实例。 我不知道这样说有没有人明白?
哈哈!頂一個。
  • 打赏
  • 举报
回复
学习学习,顺便翻页
朋友幸会 2013-08-27
  • 打赏
  • 举报
回复
IList<T> ilist=new List<T>(); 好抽象啊,都说这样更解耦,但是比如说在什么样的场景下解耦,谁能否列出个代码段看看?
火星大能猫 2011-10-24
  • 打赏
  • 举报
回复
收藏了.经常看看或许能明白.
zhaowentao_bc 2011-08-02
  • 打赏
  • 举报
回复
路过。。。。。。。。。。。。
yzf86211861 2011-08-01
  • 打赏
  • 举报
回复
路过 学习一下
wuxiaoke2009 2011-08-01
  • 打赏
  • 举报
回复
你看看接口和实现类之间的关系,然后看看MSDN 就可以清楚啦
returnnull999 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 caozhy 的回复:]
这些问题和 IList 或者 List 无关,表明lz的基础知识不扎实,对接口和泛型的理解不到位。

这三个问题本身问的都不对
1、List实现了IList的哪些方法?是实体类T里面的字段?
List还是IList泛型和T无关,T也不是实体类。
难道你没有见过 List<int> 或者 List<string> 么?

2、IList既然是个接口,它为什么可以充当数据源?
ILis……
[/Quote]
同上
种草德鲁伊 2011-07-30
  • 打赏
  • 举报
回复
一个是类一个是接口,这还不够根本么...
Luna_sun_0915 2011-07-30
  • 打赏
  • 举报
回复
以前面試就被問過這個問題、、、、
LK 2011-07-29
  • 打赏
  • 举报
回复
其实把memory搞懂了这些全明白了。
其实你的IList<T> 就是memory的 0x00 到 0xff 的一块储存空间(假设这么大),但是这块内存空间是空的。当你实例化的时候就是IList<T> list=new List<T>() 把 list 指向这块内存。然后呢T是什么呢 就是规定你这块内存从XX地址到XX地址应该储存的数据结构。其实呢 接口可以理解为就是你要申请内存的一个模板。你具体的接口方法就是把这块内存划分开,具体某块地址来储存什么。当你给list 赋值的操作体现到内存上就是你把这块内存给放上你规定好的IList<T> 这样数据结构的数据。虽然C# 不让直接操作内存,但是编程的主要思想还是操纵内存。CPU 去按顺序的执行内存上的每一条指令。学.NET 有一定水平后最好把计算机基础搞懂。会对编程有新的认识。要不然最终也就是轮为"写手".本人的一点"贱解".请丢砖。。。
如此疲惫 2011-07-27
  • 打赏
  • 举报
回复

我也学习
潘少博 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 caozhy 的回复:]
这些问题和 IList 或者 List 无关,表明lz的基础知识不扎实,对接口和泛型的理解不到位。

这三个问题本身问的都不对
1、List实现了IList的哪些方法?是实体类T里面的字段?
List还是IList泛型和T无关,T也不是实体类。
难道你没有见过 List<int> 或者 List<string> 么?

2、IList既然是个接口,它为什么可以充当数据源?
ILis……
[/Quote]
正解
fengyinhong 2011-07-27
  • 打赏
  • 举报
回复
sp1234,说得太精辟了,
很棒
tg01 2011-07-27
  • 打赏
  • 举报
回复
一个4个字母 一个5个字母 -0-
zhaoqiliang527 2011-07-27
  • 打赏
  • 举报
回复
路过学习!
a282421083 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 porschev 的回复:]
这个问题虽然不咋地。。。。

但是有这些回复。。。。

可以来个版主推荐一下了。。。
[/Quote]
++
zhuhellozhu 2011-07-27
  • 打赏
  • 举报
回复
学习饿了!
adandelion 2011-07-27
  • 打赏
  • 举报
回复
liu ming
加载更多回复(80)
JDK 1.5的泛型實現(Generics in JDK 1.5) 1 侯捷觀點 JDK 1.5的泛型實現 — Generics in JDK 1.5 — 北京《程序員》 2004/09 台北《Run!PC》2004/09 作者簡介:侯捷,資訊教育、專欄執筆、大學教師。常著文章自娛,頗示己志。 侯捷網站:http://www.jjhou.com(繁體) 北京鏡站:http://jjhou.csdn.net(簡體) 永久郵箱:jjhou@jjhou.com . 讀者基礎:有 Java語言基礎,使用過 Java Collections。 . 本文適用工具: JDK1.5 . 本文程式源碼可至侯捷網站下載 http://www.jjhou.com/javatwo-2004-reflection-and-generics-in-jdk15-sample.ZIP . 本文是 JavaTwo-2004技術研討會同名講題之部分內容書面整理。 . 關鍵術語: persistence(永續性、持久性) serialization(序列化、次第讀寫) generics(泛型) polymorphism(多型) 全文提要 泛型技術與 Sun JDK的淵源可追溯自 JDK1.3。但無論 JDK 1.3或 JDK1.4,都只是 以編譯器外掛附件的方式來支援泛型語法,並且 Java標準程式庫未曾針對泛型全 侯捷觀點 Generics in JDK 1.5 面改寫。而今 JDK1.5正式納入泛型。本文討論 JDK1.5的泛型實現,包括如何使 用及自訂 generic classes and algorithms,其中若干語法異於 JDK 1.3和 1.4。 我 我我我我曾經在 JavaTwo 2002大會上針對泛型技術給出一個講題,並將內容整理為《Java 泛型技術之發展》一文(http://www.jjhou.com/javatwo-2002.htm)。該文所談的 Java 泛型語法以及 Java泛型技術之內部實作技術,在今天(被 JDK 1.5正式納入)依 然適用。但由於有了若干小變化,並且由於 Java標準程式庫的全面改寫,使我認 為有必要再整理這篇文章,讓讀者輕鬆地在 JDK 1.5中繼續悠遊「泛型」技術。 閱讀本文之前,如果自覺基礎不夠,可以補充閱讀適才提到的《Java泛型技術之 發展》,那是一篇非常完整的文章,可助您完整認識泛型技術的來龍去脈。 Sun JDK的泛型發展歷史要從 1.3版說起。該版本配合 GJ,正式進入泛型殿堂。 所謂 GJ是 "Generic Java" 的縮寫,是一個支援泛型的 Java編譯器補充件,可謂 Java 泛型技術的先趨。隨後,泛型議題正式成為 JSR #14,其技術基礎便是源自 GJ。 JDK1.4搭配 JSR14提供的外掛附件,使泛型技術在 Java世界從妾身未明的身份扶 正而為眾所屬目的焦點。今天,JDK1.5終於內建泛型特性,不僅編譯器不再需要 任何外力(外掛附件)的幫助,整個 Java標準程式庫也被翻新(retrofit),許多 角落針對泛型做了改寫。 讓我們把帶有「參數化型別」(parameterized types)的 classes稱為 generic classes, 把帶有「參數化型別」的 methods稱為 generic algorithms,那麼,對眾多 Java程 式員而言,泛型帶來的影響不外乎以下四點,稍後逐一說明。 ..如何使用 generic classes ..如何使用 generic algorithms ..如何自訂 generic classes ..如何自訂 generic algorithms 在此先提醒您,運用泛型時,加上 –Xlint:unchecked編譯選項,可讓編譯器幫 助我們檢查潛在的型別轉換問題。 侯捷觀點 JDK 1.5的泛型實現(Generics in JDK 1.5)3 使用 Generic Classes Generic classes的最大宗運用是 collections(群集),也就是實作各種資料結構(例 如 list, map, set, hashtable)的那些 classes。也有人稱它們為容器( containers)。這 些容器被設計用來存放 Object-derived元素。而由於 Java擁有單根繼承體系,任 何 Java classes都繼承自 java.lang.Object,因此任何 Java ob

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧