再次理解泛型

    .NET1.1版本最受诟病的一个缺陷就是没有提供对泛型的支持。在机房重构的过程中,我们也都使用了泛型,那时是初次接触,至于详细的真的是不理解?那么泛型是什么,我们先从理解泛型开始。

    我们先思考这么一个问题:如果由你来实现一个冒泡排序,如果没有泛型,你会这么写:

<span style="font-family:KaiTi_GB2312;font-size:18px;"> public class SortHelper
    {
        public void BubbleSort( int[] array)
        {
            int length = array.Length;

            for (int i = 0; i <= length - 2; i++)
            {
                for (int j = length - 1; j >= 1; j--)
                {

                    // 对两个元素进行交换
                    if (array[j] < array[j - 1])
                    {
                        int temp = array[j];
                        array[j] = array[j - 1];
                        array[j - 1] = temp;
                    }
                }
            }
        }
</span>
   上面的方法体就是一个冒泡排序,咱们重要看的是所传参数类型,接下来

<span style="font-family:KaiTi_GB2312;font-size:18px;">class Program
    {
        static void Main(string[] args)
        {
            SortHelper sorter = new SortHelper();

            int[]  array = { 8, 1, 4, 7, 3 };

            sorter.BubbleSort(array);

            foreach (int i in array)
            {
                Console.Write("{0} ", i);
            }

            Console.WriteLine();
            Console.ReadKey();
        }
    }
</span>
    这个程序就可以运行了,结果是一个从小到大的排序。我们发现他运行良好,欣喜地认为这便是解决方案了。 但是后来,又需要对一个byte类型的数组进行排序,由于c#是一个强类型的语言,所以最快的办法就是把代码复制一下。那么问题就出来了,如果我再对其他数据类型进行排序呢,总不能一个接着一个复制吧。

    这时候,我们就要去想解决方案,我们可以将所传参数看作为一个占位符,由于是一个占位符,因此可以代表任何的类型。我们会发现定义占位符的最好方式就是将int[]、byte[]、char[]用占位符替代掉。占位符用T[]来表示,所以T可以代表任何类型。

    而我们需要使用一种特殊的语法来传递这个T占位符,.NET提供了专门的语法来传递占位符,其中一种就是在定义类型的时候传递,此时类型也就变成了泛型类。

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class SortHelper<T>{
	public void BubbleSort(T[] array){
	//方法实现体
 	}
}</span>
   当需要为一个int类型的数组排序时:

<span style="font-family:KaiTi_GB2312;font-size:18px;">SortHelper<int> sorter=new SorterHelper<int>();
int[] array ={8.1.4.7.3};
sorter.BubbleSort(array);
</span>
    可以看到,通过使用泛型,极大地减少了重复代码,使程序更加清爽,泛型类就类似于一个模板,可以在需要时为这个模板传入任何需要的类型。同样,我们平常所见到的泛型是和其他知识混合一起出现的,像泛型集合,反射泛型,委托泛型。我们要做的是逐个破解。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值