码迷,mamicode.com
首页 > Windows程序 > 详细

C#泛型

时间:2019-10-06 15:07:21      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:分配   else   避免   速度   优秀的程序员   gen   compare   where   带来   

  

1.泛型与其他类型作对比:

  我们现在要求实现一个类

  (1)一般声明类

   public class Stack

  {
    private int[] m_item;
    public int Pop() { return 0}
    public void Push(int itme) { }
    public Stack(int i)
    {
      this.m_item = new int[i];
    }
  }

  以上代码缺点是只能处理一种数据类型(int),换个string类型就不行了。

  (2)优秀的程序员想到用一个通用数据类型object来实现这个类

  public class Stack

  {
    private object[] m_item;
    public object Pop() { return 0}
    public void Push(object itme) { }
    public Stack(object i)
    {
      this.m_item = new object[i];
    }
  }

  这个类写的不错,非常灵活,但是在处理数据时,若数据量大,则会出现不断地装箱和拆箱操作,这将在托管堆上分配和回收大量的变量,则性能损失非常严重。

  (3)使用泛型

  

  public class Stack<T>

  {
    private T[] m_item;
    public T Pop() { return 0}
    public void Push(T itme) { }
    public Stack(T i)
    {
      this.m_item = new T[i];
    }
  }

  此类就解决了装箱和拆箱频繁带来的性能损失问题。

2.方法对比

  以下为int和string类型的比较方法

  public class CompareClass
  {

    //整数比较
    public static int CompareInt(int value1, int value2)
    {
      if (value1.CompareTo(value2) > 0)
        return value1;
      else
        return value2;
    }
    //字符串比较
    public static string CompareInt(string value1, string value2)
    {
      if (value1.CompareTo(value2) > 0)
        return value1;
      else
        return value2;
    }

  }

  以上代码对于不同类型要不同处理,此时可以写为泛型:

  public class CompareClass<T> where T : IComparable
  {
    public static T CompareValue(T value1, T value2)
    {
      if (value1.CompareTo(value2) > 0)
        return value1;
      else
        return value2;
    }

  }

3.时间消耗对比

  (1)不用泛型代码

  public static void TestGeneric()
  {
    Stopwatch stopwatch = new Stopwatch();

    //ArrayList不是泛型
    ArrayList array = new ArrayList();
    stopwatch.Start();
    for (int i = 0; i < 10000000; i++)
    {
      array.Add(i);
    }
    stopwatch.Stop();
    Console.WriteLine(stopwatch.Elapsed);
  }

  (2)用泛型代码

  public static void TestGeneric()
  {
    Stopwatch stopwatch = new Stopwatch();

    //List<int>为泛型
    List<int> gelist = new List<int>();
    stopwatch.Start();
    for (int i = 0; i < 10000000; i++)
    {
      gelist.Add(i);
    }
    stopwatch.Stop();
    Console.WriteLine(stopwatch.Elapsed);
  }

  (1)耗时2秒多,(2)耗时几百毫秒

4.使用泛型的好处:

  (1)泛型能够实现代码复用

  (2)泛型能够减少装箱拆箱操作,避免性能损失

  (3)减少处理器的负担,加快运行速度

 

C#泛型

标签:分配   else   避免   速度   优秀的程序员   gen   compare   where   带来   

原文地址:https://www.cnblogs.com/zwj-199306231519/p/11627196.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!