C#中的装箱和拆箱有什么用,如何巧妙使用

解决方案 »

  1.   

    装箱就是把值类型转换成引用类型,拆箱反之。
    比如:
    int a=0;
    object obj=a;
    Console.WriteLine("对象的值={0}",obj); 
    int b;
    b=(int)obj;
    Console.WriteLine("b的值={0}",b);
    -----------------------------------
    上面就是装箱和拆箱的操作。它在value-type 和reference-type之间的架起了一座桥梁,使得任何value-type的值都可以转换为object类型的值,反过来转换也可以。装箱和拆箱使我们能够统一地来考察类型系统,其中任何类型的值最终都可以按对象处理。C#中应该尽量避免装箱和拆箱操作,因为这样会对性能造成一定的影响。
    在.NET2.0中提供了泛型,应尽量使用泛型。
      

  2.   

    过多的使用box和unbox会影响到程序的性能
      

  3.   

    CTS值类型的一个最大的特点是它们不能为null,言外之意就是值类型的变量总有一个值。在C#中,它包括有原类型、结构、枚举器。这里需要强调一点:在传递值类型的变量时,我们实际传递的是变量的值,而非底层对象的引用,这一点和传递引用类型的变量的情况截然不同;CTS引用类型就好像是类型安全的指针,它可以为null。它包括 如类、接口、委托、数组等类型。对比前面值类型的特点,当我们分配一个引用类型时,系统会在后台的堆栈上分配一个值(内存分配与位置)并返回对这个值的引用;当值为null时,说明没有引用或类型指向某个对象。这就意味着,我们在声明一个引用类型的变量时,被操作的是此变量的引用(地址),而不是数据。
      

  4.   

    装箱-把值转换为object类型
    拆箱-把object类型转换为值可以增加类型的安全性,不过,还是建议用泛型好.
      

  5.   

    有了泛型,最好别用装箱拆箱。影响性能。
    就是为了提高代码的复用,你可以听听李建忠webcast说的很详细。
      

  6.   

    装箱在实际应用中的最好例子是ArrayList,在泛型出现之前,可是很强大的。甚至DataTable的底层代码都用ArrayList做。可以说没有装箱就实现不了ArrayList,没有ArrayList就没有DataTable,没有DataTable就没有操作数据库的能力。