• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

详细介绍C# 泛型

c# 搞代码 4年前 (2022-01-09) 17次浏览 已收录 0个评论

  在C#开发中,必不可少的要用到泛型。泛型是.NET2.0版本就有的,它广泛应用于C#框架中容器的使用中。下面我们来详细介绍一下。

  一、泛型的主要优势

  1.性能更高。

  2.类型更安全。

  3.代码更多的重用和扩展性。

  二、泛型的基本使用

  泛型的一个主要优点是性能,我们来看下面的例子:

static void Main(string[] args)
  {
   //不是泛型的集合类
   ArrayList list = new ArrayList();
   //添加一个值类型 装箱操作
   list.Add(12);
   //去除第一个元素12 拆箱操作
   int num = (int)list[0];
   Console.WriteLine(num);
   Console.WriteLine("执行结束");
   Console.ReadKey();
  }

元数据中ArrayList类的Add方法

//
  // 摘要:
  //  将对象添加到 System.Collections.ArrayList 的结尾处。
  //
  // 参数:
  // value:
  //  要添加到 System.Collections.ArrayList 末尾的 System.Object。该值可以为 null。
  //
  // 返回结果:
  //  value 已添加的 System.Collections.ArrayList 索引。
  //
  // 异常:
  // T:System.NotSupportedException:
  //  The System.Collections.ArrayList is read-only.-or- The System.Collections.ArrayList
  //  has a fixed size.
  public virtual int Add(object value);

  相信大家都知道,装箱拆箱是比较损耗性能的,在执行add方法是, 把值类型转换成引用类型(装箱),取出来时在去拆箱,那怎么样才能避免这种情况发生呢?

再来看下面代码:

本文来源gaodai#ma#com搞@@代~&码*网2

//泛型集合类
   List<int> list = new List<int>();
   list.Add(12);
   int num = list[0];
   Console.WriteLine(num);
   Console.WriteLine("执行结束");
   Console.ReadKey();

  这个时候,代码并没有发生装箱拆箱操作。

元数据中List类的Add方法

//
  // 摘要:
  //  将对象添加到 System.Collections.Generic.List`1 的结尾处。
  //
  // 参数:
  // item:
  //  要添加到 System.Collections.Generic.List`1 末尾的对象。对于引用类型,该值可以为 null。
  public void Add(T item);

  代码写到这里时,我们只是创建了一个List泛型集合,你可能还感觉不到泛型优势到底在哪里,你也可能不知道泛型到底是怎么用的。好,下面我们写个测试还有自己实际应用的例子。

测试arraylist和list集合的性能

static void Main(string[] args)
  {
   //不是泛型的集合类
   ArrayList arylist = new ArrayList();
   //添加一个值类型 装箱操作

   //泛型集合类
   List<int> list = new List<int>();


   //计时类
   Stopwatch watch = new Stopwatch();
   watch.Start();//开始计时
   for (int i = 0; i < 10000000; i++)
   {
    arylist.Add(i);
   }
   watch.Stop();
   Console.WriteLine("Arraylist用时:"+watch.ElapsedMilliseconds);

   Stopwatch watch1 = new Stopwatch();
   watch1.Start();//开始计时
   for (int i = 0; i < 10000000; i++)
   {
    list.Add(i);

   }
   watch1.Stop();
   Console.WriteLine("list用时:" + watch1.ElapsedMilliseconds);
   Console.WriteLine("执行结束");
   Console.ReadKey();
  }

  执行结果:

  以上的例子中,可以看出在计时的过程中代码写的重复了, 怎么解决这个问题呢, 泛型要排上用场了。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详细介绍C# 泛型

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址