1
2
3
4
5
6
7

泛型

发布时间:2018-12-15 16:11   发布人:焦卫峰   浏览次数:517

1.泛型

在 ArrayList等集合类中,元素的类型均为 Object。由于.NET 中所有类都继承于 Object,所以这些集合可以存储任何类型的元素。

例如:

ArrayList list = new ArrayList();

list.Add(10); //添加元素

int n = (int)list[0]; //读取元素

在添加元素的过程中,整数 10 被装箱成 Object 对象,然后添加到数组列表中。元素从数组列表读取出来后类型为 Object,必须通过拆箱操作转换为 int 型,才能赋给 int 型变量 n。

 

缺点:

在装箱、拆箱的过程中,可能会造成一定的性能损失

不利于编译器进行严格的类型安全检查

显式转换会降低程序的可读性

 

1)泛型方法

例如,交换两个数,可以使用方法的重载,来实现两个整数、两个float和两个double的交换。也可以使用泛型方法:

    static void  Swap<T>(ref T a,ref T b){

        T t=a;

        a=b;

        b=t;

    }

    static void Main(string[] args)

    {

        ...

        Swap<int>(ref aref b);

}

2)泛型类

    class A<T>{

        public void  Swap(ref T a,ref T b){

            T t=a;

            a=b;

            b=t;

        }

    }

   

    static void Main(string[] args)

    {

        int a=6,b=5;

        A<int> aa=new A<int>();

        aa.Swap(ref a,ref b);

        System.Console.WriteLine("a={0},b={1}",a,b);

}

泛型的定义中可含有多个类型参数。

class Dictionary<K, V>{

}

对应的,在使用泛型类 Dictionary<K, V>时,必须提供两个类型实参。

Dictionary<int, string> dic = new Dictionary<int, string>();

泛型最常见的用途是定义泛型集合,泛型集合和相对应的非泛型集合功能基本相同,但泛型集合能提供严格的类型检查,具有较强的安全性。此外,如果元素类型为值类型,泛型集合的性能通常优于非泛型集合。泛型集合类定义在 System.Collections.Generic 命名空间中。