c#中泛型的类型安全与性能提高

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Collections;
  6. namespace 泛型
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             // 泛型解决的问题:
  13.             //一 避免拆箱与装箱
  14.             //例: 我们在写一个方法时如果有这样的需求,传一个参数,这个参数可以是int或者string,或者其他的自定义的对象,或者结构,这时有两种做法,1分别写2个方法做重载,2用object做参数。。
  15.             //1分别写2个方法做重载,增加了代码量,而且方法内好多代码是相同的,不推荐
  16.             //2用object做参数。。 这样必定在方法体内有大量的装箱拆箱,类型转换,影响性能,不推荐 
  17.            
  18.             //例:非泛型ArrayList
  19.             ArrayList arr = new ArrayList();
  20.             arr.Add(100); 
  21.             //public virtual int Add(object value); 我们看add方法的定义,是以object value做参数的
  22.             //所以在Add传入值类型(100)时,必然会产生隐式装箱
  23.             //然后我们在读取值时:必须这样写
  24.             int value = (int)arr[0]; //在此处,为了读取出我们的值类型数据,又出现了拆箱操作。
  25.             Console.WriteLine( value );
  26.             //以上操作频繁拆箱装箱,不推荐 !
  27.             //下面演示一下泛型集合类的操作
  28.             List<int> list = new List<int>();
  29.             list.Add(100);
  30.             int value2 = list[0];
  31.             Console.WriteLine( value2 );
  32.             //以上操作中,泛型定义为int,是在JIT编译器动态生成类中使用,不会产生装箱与拆箱操作。
  33.             //二,类型安全
  34.             //如果没有泛型,我们之前的ArrayList中是用object做参数,那么就是说,可以添加int也可以是string
  35.             ArrayList arr3 = new ArrayList();
  36.             arr3.Add(100);
  37.             arr3.Add( "100");
  38.             //以上代码是不会在编译时报错的
  39.             //然后我们跌代输出
  40.             foreach (int i in arr3)
  41.             {
  42.                 Console.WriteLine(i);
  43.             }
  44.             //运行时出错了,呵呵,到底是按int处理,还是string谁知道?
  45.             //虽然我们可以手动避免这种问题,我add时注意不就行了吗?
  46.             //但这样是类型不安全的,泛型做了一种强制安全
  47.             List<int> list2 = new List<int>();
  48.             list2.Add(100);
  49.             //list2.Add("100"); //编译时报错
  50.             Console.ReadLine();
  51.         }
  52.     }
  53. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值