在C#开发中,必不可少的要用到泛型。泛型是.NET2.0版本就有的,它广泛应用于C#框架中容器的使用中。下面我们来详细介绍一下。
一、泛型的主要优势
1.性能更高。
2.类型更安全。
3.代码更多的重用和扩展性。
二、泛型的基本使用
泛型的一个主要优点是性能,我们来看下面的例子:
static void Main(string[] args) { //不是泛型的集合类 ArrayList list = new ArrayList(); //添加一个值类型 装箱操作 list.Add(12); //去除第一个元素12 拆箱操作 int num = (int)list[0]; Console.WriteLine(num); Console.WriteLine("执行结束"); Console.ReadKey(); }
元数据中ArrayList类的Add方法
// // 摘要: // 将对象添加到 System.Collections.ArrayList 的结尾处。 // // 参数: // value: // 要添加到 System.Collections.ArrayList 末尾的 System.Object。该值可以为 null。 // // 返回结果: // value 已添加的 System.Collections.ArrayList 索引。 // // 异常: // T:System.NotSupportedException: // The System.Collections.ArrayList is read-only.-or- The System.Collections.ArrayList // has a fixed size. public virtual int Add(object value);
相信大家都知道,装箱拆箱是比较损耗性能的,在执行add方法是, 把值类型转换成引用类型(装箱),取出来时在去拆箱,那怎么样才能避免这种情况发生呢?
再来看下面代码:
本文来源gaodai#ma#com搞@@代~&码*网2
//泛型集合类 List<int> list = new List<int>(); list.Add(12); int num = list[0]; Console.WriteLine(num); Console.WriteLine("执行结束"); Console.ReadKey();
这个时候,代码并没有发生装箱拆箱操作。
元数据中List类的Add方法
// // 摘要: // 将对象添加到 System.Collections.Generic.List`1 的结尾处。 // // 参数: // item: // 要添加到 System.Collections.Generic.List`1 末尾的对象。对于引用类型,该值可以为 null。 public void Add(T item);
代码写到这里时,我们只是创建了一个List泛型集合,你可能还感觉不到泛型优势到底在哪里,你也可能不知道泛型到底是怎么用的。好,下面我们写个测试还有自己实际应用的例子。
测试arraylist和list集合的性能
static void Main(string[] args) { //不是泛型的集合类 ArrayList arylist = new ArrayList(); //添加一个值类型 装箱操作 //泛型集合类 List<int> list = new List<int>(); //计时类 Stopwatch watch = new Stopwatch(); watch.Start();//开始计时 for (int i = 0; i < 10000000; i++) { arylist.Add(i); } watch.Stop(); Console.WriteLine("Arraylist用时:"+watch.ElapsedMilliseconds); Stopwatch watch1 = new Stopwatch(); watch1.Start();//开始计时 for (int i = 0; i < 10000000; i++) { list.Add(i); } watch1.Stop(); Console.WriteLine("list用时:" + watch1.ElapsedMilliseconds); Console.WriteLine("执行结束"); Console.ReadKey(); }
执行结果:
以上的例子中,可以看出在计时的过程中代码写的重复了, 怎么解决这个问题呢, 泛型要排上用场了。