点痣会癌变吗:C#中List与IList的区别
来源:百度文库 编辑:中财网 时间:2024/05/02 07:40:30
List
IList
下面谈谈它们之间的区别:
首先,List
具体来说,IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口。它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,那么使用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]);
总之,正如那些高手说的:
接口实现松耦合...有利于系统的维护与重构...优化系统流程...
鼓励使用接口
这样可以实现功能和具体实现的分离
实现接口分离的原则
不是看实际需要用的