通常我们会见到泛型的使用。这里以以下实际例子进行分析,希望能够起到抛砖引玉的作用:
【例子】 IList<ColumnInfo> Column1=new List<ColumnInfo>(); List<ColumnInfo> Column2=new List<ColumnInfo>(); 有何区别?是否都可以实现相同功能?
千万要注意:等式的右边是List<ColumnInfo>,而不是 IList<Users>,
如果在List前面加一个I, 就会出现错误:抽象类或接口无法创建实例。
来自网友的见解:
这两行代码,从操作上来看,实际上都是创建了一个List<Class1>对象的实例,也就是说,他们的操作没有区别。只是用于保存这个操作的返回值变量类型不一样而已。 那么,我们可以这么理解,这两行代码的目的不一样。 List <Class1> List11 =new List <Class1>(); 是想创建一个List<Class1>,而且需要使用到List<T>的功能,进行相关操作。
而IList <Class1> IList11 =new List <Class1>(); 只是想创建一个基于接口IList<Class1>的对象的实例,只是这个接口是由List<T>实现的。所以它只是希望使用到IList<T>接口规定的功能而已。
【1】第一种:IList<Student> Column1=new List<ColumnInfo>()只是想创建一个基于接口IList<Student> 对象的实例,只是这个接口是由List类实现的。所以它只是希望使用到IList 接口规定的功能而已
【2】第二种:List<Student> Column2=new List<ColumnInfo>()是想创建一个基于接口List<Student>对象的实例 ,而且需要使用到List类的全部功能,进行相关操作。
使用情况:看情况使用,如果只是简单的数据绑定和显示第一种足够。如果要进行排序等复杂的功能,就得用第二种。效率当然是第一种高了,但功能少,第二种效率差那么一点,但功能多;既然Column1实现了IList接口,那么就可以使用IList接口中规定的功能。
当你只想使用接口的方法时,ILis<>这种方式比较好.他不获取实现这个接口的类的其他方法和字段,有效的节省空间.
【转载博客园】