黑马程序员技术交流社区
标题: 泛型集合是什么原理? [打印本页]
作者: 复古。先生 时间: 2014-8-5 10:30
标题: 泛型集合是什么原理?
本帖最后由 复古。先生 于 2014-8-7 08:29 编辑
有大神可以通俗的帮我解释下吗?
作者: 许庭洲 时间: 2014-8-5 10:40
本帖最后由 许庭洲 于 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:04
完全看不懂。。
作者: qsq0000hm 时间: 2014-8-5 11:10
泛型集合:上面规定了要放什么东西的盒子,其他类型的东西不能放
非泛型集合:什么都可以放的盒子
作者: 傅磊 时间: 2014-8-5 21:00
原理啊?不晓得,只知道用现在,
泛型集合的长度不固定,里面的元素类型要事先定义好,定义好类型后就不能储存其他类型的值
非泛型集合的长度同样不固定,而且元素类型为object类型,也就是说什么类型都可以往里面放
作者: mouxingyu 时间: 2014-8-6 07:02
个人理解(不准确):
泛型集合在声明类型的时候 里面出现了该类型的集合
在你add的时候 直接加进去 不用像非泛型的集合那样 转换成object类型来存储
比非泛型集合提高了效率。 也便于使用。
楼主真的想要了解内部原理 可能的话去IL语言 自己用.NET Reflector去看内部是怎么实现的。
希望能帮助楼主!
作者: 梦里不知身是客 时间: 2014-8-6 12:10
泛型和非泛型集合类在C#程序中是非常重要的一个基础概念,
理解的时候可以对比着进行理解:
非泛型集合:ArrayList Hashtable
泛型集合类:List<T> Dictionary<T>
ArrayList对应List<T>
Hashtable对应Dictionary<Tkey,Tvalue>
非泛型集合类在取出值的时候需要进行类型的转换操作,
如果有值类型会引起装箱和拆箱的操作,这样程序在无意间就会
进行大量的额外操作,程序的运行效率会受到很大影响,为了类型安全
和减少值类型和引用类型之间的拆装箱,要尽量使用
List<T>和Dictionary<Tkey,Tvalue>
这两种集合不会引起拆装箱的操作,但是我们用的时候只能
放入指定的类型
作者: 复古。先生 时间: 2014-8-7 08:29
谢谢了,有点蒙蒙懂懂了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |