泛型学习第一天:List与IList的区别

先看代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace List
{
public class Users //类Users 用户
{
public string Name; // 姓名
public int Age; // 年龄
public Users(string _Name, int _Age)
{
Name = _Name;
Age = _Age;
}
}

class Program
{

static void Main(string[] args)
{

Users U = new Users("jiang", 24);

IList<Users> UILists = new List<Users>();
//千万要注意:等式的右边是List<Users>,而不是 IList<Users>,
//如果在List前面加一个I, 就会出现错误:抽象类或接口无法创建实例。

UILists.Add(U);

U = new Users("wang", 22);
UILists.Add(U);

List<Users> I = ConvertIListToList<Users>(UILists);

Console.WriteLine(I[0].Name);
Console.WriteLine(I[1].Name);

Console.Read();
}

// **//// <summary>
/// 转换IList<T>为List<T> //将IList接口泛型转为List泛型类型
/// </summary>
/// <typeparam name="T">指定的集合中泛型的类型</typeparam>
/// <param name="gbList">需要转换的IList</param>
/// <returns></returns>
public static List<T> ConvertIListToList<T>(IList<T> gbList) where T : class //静态方法,泛型转换,
{
if (gbList != null && gbList.Count >= 1)
{
List<T> list = new List<T>();
for (int i = 0; i < gbList.Count; i++) //将IList中的元素复制到List中
{
T temp = gbList[i] as T;
if (temp != null)
list.Add(temp);
}
return list;
}
return null;
}
}
}

IList与List的区别:

(1)首先IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口。

它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,确实,IList<T>可以胜任。

不过,更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序。这个时候IList<T>就爱莫能助了。

1、当你只想使用接口的方法时,ILis<>这种方式比较好.他不获取实现这个接口的类的其他方法和字段,有效的节省空间.

2、IList <>是个接口,定义了一些操作方法这些方法要你自己去实现
List <>是泛型类,它已经实现了IList <>定义的那些方法

IList <Class1> IList11 =new List <Class1>();
List <Class1> List11 =new List <Class1>();

这两行代码,从操作上来看,实际上都是创建了一个List<Class1>对象的实例,也就是说,他们的操作没有区别。

只是用于保存这个操作的返回值变量类型不一样而已。

那么,我们可以这么理解,这两行代码的目的不一样。
List <Class1> List11 =new List <Class1>();
是想创建一个List<Class1>,而且需要使用到List<T>的功能,进行相关操作。

IList <Class1> IList11 =new List <Class1>();
只是想创建一个基于接口IList<Class1>的对象的实例,只是这个接口是由List<T>实现的。所以它只是希望使用到IList<T>接口规定的功能而已。

时间: 2024-10-02 10:58:30

泛型学习第一天:List与IList的区别的相关文章

泛型学习第一天:List与IList的区别 (三)

已经有很多人讨论过IList和List的区别,恩,我也赞同其中的一些观点,其实他们二者也是有优有劣的,看你着重用在哪个方面,先贴一下我赞同的意见,基本上也都是网友们总结的. 首先IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口.它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,确实,IList可以胜任. 其次, IList <> 是在 .net framework 2.0里面才支持的 1. 不过,更多的时候,我们要

泛型学习第一天:List与IList的区别 (二)

原文: 探讨Ilist<>与List<> 首先要了解一点的是关于接口的基础知识: 接口不能直接实例化但是接口派生出来的抽象类可以实例化所有派生出来的抽象类都可以强制转换成接口的实例 第三条我解释一下:比如,IList <Class> IList11 =new List <Class>(); 也就是接口派生出来的抽象类可以转换为接口的实例,这也是常说的里氏替换原则(子类对象可以代替父类对象,但其父类对象不能代替子类对象) 首先,List<T>是一个

ExtJS学习第一天 MessageBox

此文用来记录学习笔记: •学习任何技术,首先都要从Helloworld开始,那么我们首要任务就是写一个简单的HelloWorld程序,带领同学们走进ExtJS的世界. •Ext.onReady:这个方法是Ext的准备函数,也就是Ext相关的代码都会在这个函数里书写,它比较类似于window的onload方法,但是注意其执行时机是在页面的DOM对象加载完毕之后立即执行. •Ext.window.MessageBox:这个类提供了ExtJS的弹出提示框.确认框等简单的小组件.我们首先根据它写出我们的

委托 ,事件,泛型学习总结

委托 ,事件,泛型学习总结 C# 委托 一图流: 委托.png 如果这些内容帮助到你了,希望您给予支持 o(^ ▽ ^)o

PS学习第一天

ps 学习第一天 ps 学习第一天 ps软件的使用 1.PS面板的介绍 新建文档 工具 选框工具 拾色器:前景色和背景色的颜色的调整 移动工具 图层面板 文件保存和打开 自由变换 羽化 常用快捷键 ps软件的使用 1.PS面板的介绍 1.1软件界面 PS面板.png 说明 窗口-工作区-复位基本功能:让软件界面恢复到默认的标准状态; 所有的控制面板都在窗口菜单中,可以对其进行隐藏和显示,只需要去掉前面的小勾 工具箱中个小工具对应属性栏的属性,每一个小工具有不同的属性操作 控制面板是将来对工作区的

FluentData 学习 第一弹

地址: http://fluentdata.codeplex.com/ 前世: FluentData 我们公司用的一个增删改查的里面的持久层.之前还不知道 这个持久层叫FluentData.  某天看见群里 说 某视频网站里面 居然在讲这个开发框架,还收费.我搜了一下.fluentdata有源代码. 这个13年有过记载.不过我是新手.什么也需要 学习一下.  和 室友说了一下微型orm ,他们 呢  用的  微型orm是 Dapper .可以去了解一下. 废话真多,完毕. FluentData

javascript学习第一天

从大学第一次接触到JavaScript,到现在一直是个软肋,之前也是学习过一遍,但是缺乏系统学习,基础不牢,那么今天开始从基础部分学起来,今天是第一天,每天至少要保证效率,也要保证学习质量. 恩,要按照计划来进行,今天是学习第一天,以后保持,学习记录写在这里,看我可以坚持多久. 认真对待每一天. 今天学习内容回忆: 1.匿名函数与有名函数:两者的使用场景. 2.Windows.onload = 函数名:或者 Windows.onload = function(){  /**代码*/} 3.js函

(转)ASP.NET MVC 学习第一天

天道酬勤0322 博客园 | 首页 | 发新随笔 | 发新文章 | 联系 | 订阅  | 管理 随笔:10 文章:0 评论:9 引用:0 ASP.NET MVC 学习第一天 今天开始第一天学习asp.net mvc,写的不是很好,高手不要喷,希望大家能一起进步学习. 好了,开始学习 新建项目,选择mvc 4应用程序 接下来选择基本,视图引擎当然要选择Razor,如果在选择aspx那我们就没必要用mvc喽 在这里我们简单说一下,项目模板如果选择空,这就需要我们自己进行导入很多文件,而选择基本vs会

白皮书之C++学习第一天

大三荒废了一年的时间在lol上,上头了吧.后悔也来不及了,总之我会拼命追回来的! 今天重拾起这本白皮书,也是很感慨啊! 废话不多说,好好学,好好找工作吧!大三结束了啊! 每个C++程序都有一个main函数作为程序的入口,由操作系统显示调用,并且返回值来确定程序是否成功执行.(0表示成功) 想要更深入地了解C++,所以学习了命令行编译C++程序的方法. 写了个最简单的helloworld程序. 1 #include<iostream> 2 using namespace std; 3 int m