.NET中为什么要使用泛型编程?

 .NET2.0中新添加了不少特性,其中重要的就是对泛型的支持。
那么为什么要用到泛型,有什么优势?
.NET中对泛型的支持包含在System.Collections.Generic命名空间中,看以下一个简单的例子:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace Console_Generic
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList al = new ArrayList();
            al.Add(5);
            al.Add(2);
            al.Add("hh");
            foreach (int i in al)
            {
                Console.WriteLine(i);
            }
        }
    }
}
此程序在运行过程当中会出现运行时错误:al.Add("hh");无法进行类型转换。而我们经常需要的是在编译期间发现错误,而不是把错误带到运行期间,这样,安全性得不到保证。
下面的程序:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace Console_Generic
{
    class Program
    {
        static void Main(string[] args)
        {
           
            List<int> list = new List<int>();
            list.Add(5);
            list.Add(1);
            list.Add(5.0);
            foreach (int i in list)
            {
                Console.WriteLine(i);
            }
        }
    }
}
此程序在编译期间不能通过,原因与上面的一致。但是在程序运行之前就可以发现错误。这正是我们所希望的。
在.NET中,所有的类型都单继承子OBJECT,我们经常要对返回的OBJECT类型进行强制转换,转换成为我们所希望的类型,例如:
 return (PetShop.IDAL.IProduct)Assembly.Load(path).CreateInstance(className);
该句在运行时动态加载程序集,同时创建了一个实例化的对象,但是最终强制转化返回一个接口对象。
一般在强制转换的过程当中是不安全的,因为OBJECT对象可以随便转换为你想要的任何类型,所以使用泛型有效避免了转换过程中的不安全性。
其次,在将简单的类型封装位OBJECT类型进行传递时,伴随这装箱和拆箱的操作,而这两个过程都会对性能造成很大的影响,但是使用泛型,没有了这个繁琐的过程,完成的是相同的功能,但是性能得到了提升。

你可能感兴趣的:(.NET中为什么要使用泛型编程?)