欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

c#中的泛型

程序员文章站 2022-05-16 16:59:45
...

这篇文章主要来讲讲c#中的泛型,因为泛型在c#中有很重要的位置,对于写出高可读性,高性能的代码有着关键的作用。当我多次看到自己团队的代码中包含着大量的非泛型集合,隐式的装箱和拆箱操作时,我都会建议他们补一补泛型基

这篇文章主要来讲讲c#中的泛型,因为泛型在c#中有很重要的位置,对于写出高可读性,高性能的代码有着关键的作用。当我多次看到自己团队的代码中包含着大量的非泛型集合,隐式的装箱和拆箱操作时,我都会建议他们补一补泛型基础。

1,什么是泛型

    • 泛型是c#2中非常重要的一个新特性,它增强了代码的可读性,将大量的安全检查从执行期转移到编译期,从而提高代码的安全性和性能。从根本上来说,泛型实现了类型和方法的参数化。

2,为什么要使用泛型,泛型解决了什么问题

我们先来看看下面的代码(代码只是为了演示泛型,没有实际的意义),看看有什么问题?

c#中的泛型
 1 class PRogram
 2     {
 3         static void Main(string[] args)
 4         {
 5             ArrayList array = new ArrayList();
 6             array.Add(1);
 7             array.Add(2);
 8             array.Add(3);
 9             ArrayList resultArray = NumberSqrt(array);
10             foreach (var item in resultArray)
11             {
12                 Console.WriteLine(item);
13             }
14         }
15         public static ArrayList NumberSqrt(ArrayList array)
16         {
17             ArrayList sqrtArray = new ArrayList();
18             foreach (var item in array)
19             {
20                 sqrtArray.Add(Math.Sqrt((double)(int)item));
21             }
22             return sqrtArray;
23 
24         }
25     }
View Code
    • 首先ArrayList是一个非泛型集合,它需要的参数是object,那么我如果往集合里面装配其它的类型,在编译时也无法判断错误(比如说我装配一个字符串进去,完全是可以编译成功的)。
    • 由于ArrayList需要的是一个object,那么在你将值类型装配到集合中时,会进行隐式装箱操作,在使用集合中的数据时,需要进行拆箱操作。从而影响应用程序的性能。(关于值类型装箱请参考c#中的引用类型和值类型)。
    • 代码可以可读性差,完全看不明白ArrayList应该装配什么类型。

下面来看看泛型是如何解决这些问题的:

c#中的泛型
 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Listdouble