A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 复古。先生 中级黑马   /  2014-8-5 10:30  /  1421 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 复古。先生 于 2014-8-7 08:29 编辑

有大神可以通俗的帮我解释下吗?

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

8 个回复

正序浏览
梦里不知身是客 发表于 2014-8-6 12:10
泛型和非泛型集合类在C#程序中是非常重要的一个基础概念,

理解的时候可以对比着进行理解:

谢谢了,有点蒙蒙懂懂了。
回复 使用道具 举报

泛型和非泛型集合类在C#程序中是非常重要的一个基础概念,

理解的时候可以对比着进行理解:

非泛型集合:ArrayList     Hashtable
泛型集合类:List<T>       Dictionary<T>

ArrayList对应List<T>  

Hashtable对应Dictionary<Tkey,Tvalue>   

非泛型集合类在取出值的时候需要进行类型的转换操作,

如果有值类型会引起装箱和拆箱的操作,这样程序在无意间就会

进行大量的额外操作,程序的运行效率会受到很大影响,为了类型安全

和减少值类型和引用类型之间的拆装箱,要尽量使用

List<T>和Dictionary<Tkey,Tvalue>

这两种集合不会引起拆装箱的操作,但是我们用的时候只能

放入指定的类型

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
个人理解(不准确):
泛型集合在声明类型的时候  里面出现了该类型的集合   
在你add的时候  直接加进去 不用像非泛型的集合那样 转换成object类型来存储
比非泛型集合提高了效率。 也便于使用。

楼主真的想要了解内部原理   可能的话去IL语言  自己用.NET Reflector去看内部是怎么实现的。
希望能帮助楼主!

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
原理啊?不晓得,只知道用现在,
泛型集合的长度不固定,里面的元素类型要事先定义好,定义好类型后就不能储存其他类型的值
非泛型集合的长度同样不固定,而且元素类型为object类型,也就是说什么类型都可以往里面放

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
泛型集合:上面规定了要放什么东西的盒子,其他类型的东西不能放

非泛型集合:什么都可以放的盒子

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
许庭洲 发表于 2014-8-5 10:40
//尽管 ProcessItems 方法无法添加或移除项,但对于 ProcessItems 内部的 T[],IsReadOnly 属性返回 False ...

完全看不懂。。
回复 使用道具 举报
本帖最后由 许庭洲 于 2014-8-5 10:43 编辑

//尽管 ProcessItems 方法无法添加或移除项,但对于 ProcessItems 内部的 T[],IsReadOnly 属性返回 False,因为该数组本身未声明 ReadOnly 特性。
class Program
{
    static void Main()
    {
        int[] arr = { 0, 1, 2, 3, 4 };
        List<int> list = new List<int>();
        for (int x = 5; x < 10; x++)
        {
            list.Add(x);
        }
        ProcessItems<int>(arr);
        ProcessItems<int>(list);
    }
    static void ProcessItems<T>(IList<T> coll)
    {
        foreach (T item in coll)
        {
            System.Console.Write(item.ToString() + " ");
        }
        System.Console.WriteLine();
    }
}
//上面代码示例演示带有 IList<(Of <(T>)>) 输入参数的单个泛型方法如何同时循环访问列表和整数数组。

点评

我能表示下这个哥们,请在解释一个名词的时候不要用另外的专有名词进行解释么?????完全看不懂哇~!!!!!  发表于 2014-8-5 11:36

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马