zoukankan      html  css  js  c++  java
  • 泛型(Generic)方法(函数,算法)

    例子:

           static void Main(string[] args)
            {
                int[] a1 = { 1, 2, 3, 4, 5 };
                int[] a2 = { 1, 2, 3, 4, 5 };
                double[] a3 = { 1.1, 2.2, 3.3, 4.4, 5.5 };
                double[] a4 = { 1.1, 2.2, 3.3, 4.4, 5.5 };
                var result = Zip(a1, a2);
                Console.WriteLine(string.Join(",", result));
            }
            static int[] Zip(int[] a, int[] b)
            {
                int[] zipped = new int[a.Length + b.Length];
                int ai = 0, bi = 0, zi = 0;
                do
                {
                    if (ai < a.Length) zipped[zi++] = a[ai++];
                    if (bi < b.Length) zipped[zi++] = b[bi++];
                } while (ai < a.Length || bi < b.Length);
                return zipped;
            }
    

    通过泛型方法来实现对不同类型的数组用同一种方法进行操作,如果不适用泛型则方法只能对规定的类型进行修改。

    Zip方法是将两个数组你一个我一个插入到一个新的数组里并且返回。

    这样不会出现成员膨胀(方法膨胀)也不会出现重复逻辑(导致需要修改的时候要每个重载方法都修改)

    如何修改成泛型方法呢?
    我们把Zip类中的int[]全部替换为T[]类型( int ai = 0, bi = 0, zi = 0;这句不含有[]所以不会被替换)
    然后在static int[] Zip(int[] a, int[] b)的Zip后加,表示这是一个泛型方法,类型参数是T。

    static T[] Zip<T>(T[] a, T[] b)
    

    意思是,Zip是一个类型参数是T的泛型方法,它的参数是两个T类型的数组,返回一个T类型的数组

           static void Main(string[] args)
            {
                int[] a1 = { 1, 2, 3, 4, 5 };
                int[] a2 = { 1, 2, 3, 4, 5 };
                double[] a3 = { 1.1, 2.2, 3.3, 4.4, 5.5 };
                double[] a4 = { 1.1, 2.2, 3.3, 4.4, 5.5 };
                var result = Zip(a1, a2);
                Console.WriteLine(string.Join(",", result));
            }
            static T[] Zip<T>(T[] a, T[] b)
            {
                T[] zipped = new T[a.Length + b.Length];
                int ai = 0, bi = 0, zi = 0;
                do
                {
                    if (ai < a.Length) zipped[zi++] = a[ai++];
                    if (bi < b.Length) zipped[zi++] = b[bi++];
                } while (ai < a.Length || bi < b.Length);
                return zipped;
            }
    


    当我们传入a1,a2时,我们并没有特化Zip方法

            var result = Zip(a1, a2);
    

    说明编译器能自动推断出来T的类型,所以我们不用显示去写,这就是泛型方法在调用的时候类型参数的自动推断。

  • 相关阅读:
    URL请求工具
    .net动态类型在处理json数据方面的应用
    Eclipse中部署hadoop2.3.0
    Java自学之道全文下载地址
    如何生成二维码过程详解
    网页加上进度条的代码 程序员
    将checkbox设置成单选 程序员
    显示网页加载进度条 程序员
    putty 程序员
    Introducing Play 2.0(介绍play 2.0) 程序员
  • 原文地址:https://www.cnblogs.com/maomaodesu/p/11653842.html
Copyright © 2011-2022 走看看