• 【C#高级】泛型(一)


      泛型,.net 2.0之后出现,基本只要代码中出现 ‘<>’ 尖括号就可以确定是泛型。

      在2.0之前大多是使用Object来代替,因为所有类都是Object的派生类,根据继承的原理Object可以代替所有派生类,相反他的派生类也可以代替他的基类

     1 class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             int paramInt = 123;
     6             string paramString = "字符串";
     7             DateTime parmDateTime = DateTime.Now;
     8 
     9             Console.WriteLine("这是Object方法调用方法传递。");
    10             ObjectMethod.ObjectGo(paramInt);
    11             ObjectMethod.ObjectGo(paramString);
    12             ObjectMethod.ObjectGo(parmDateTime);
    13 
    14 
    15 
    16             Console.ReadLine();
    17         }
    18     }
    1    public static class ObjectMethod
    2     {
    3         public static void ObjectGo(object param)
    4         {
    5             Console.WriteLine("这是Object方法接收到的参数:{0} ,参数类型:{1}",param,param.GetType());
    6         }
    7     }

    上面这个例子,大家也能看到,当想使用一个方法来接多种类型的参数时使用了Object类型,这是一种很古老的写法了,而且在装箱拆箱上面也有问题,因为这个ObjectGo方法并不清楚他要接收什么类型的参数,可能是string可能是int,也可能是其他自定义类型,简单点说就是可能是值类型也有可能是引用类型,比如当我int类型的参数向方法中传递时,应为int类型为引用类型在栈中存储而Object是值类型在堆中存储所以当int类型向方法中传递时就会发生一次由栈向堆中内存的Copy也就是一次拆箱,但是当参数传递到方法中时发现参数类型为int引用类型,接着就又装箱。

    在2.0之后泛型出来了,完全可以使用泛型来传递参数的类型,从而来避免这一次没有必要的装箱拆箱

    1   public static class GenericMethod
    2     {
    3         public static void GenericGo<T>(T param)
    4         {
    5             Console.WriteLine("这是泛型方法接收到的参数:{0} ,参数类型:{1}", param, param.GetType());
    6         }
    7     }
    1             GenericMethod.GenericGo<int>(paramInt);//<T>可以省略
    2             GenericMethod.GenericGo(paramString);
    3             GenericMethod.GenericGo(parmDateTime);     

     以下时两个方法分别的运行时间:

  • 相关阅读:
    第二周
    7月课程
    自定义线程池的创建
    jvm8内存模型和内存分配
    多线程中 CountDownLatch CyclicBarrier Semaphore的使用
    HashMap Hashtable TreeMap LinkedHashMap 分析
    HashSet LinkedHashSet TreeSet 分析
    ArrayList Vector LinkedList分析
    Java之流水号生成器实现
    mysql-mmm 部署高可用集群
  • 原文地址:https://www.cnblogs.com/caijiabao/p/10703040.html
Copyright © 2020-2023  润新知