c#编程基础:装箱与拆箱

目录

  • 前言
  • 数组对于值类型
    • List不发生装箱与拆箱
    • ArrayList发生装箱与拆箱
  • 数组对于引用类型
    • List不发生装箱与拆箱
    • ArrayList不发生装箱与拆箱
  • 总结


前言

装箱:值类型转换为引用类型
拆箱:引用类型转换为值类型

引用类型:任何称为“类”的类型都是引用类型,使用class修饰

值类型:所有值类型都称为结构或枚举,使用struct或enum修饰

c#中的List()和动态数组ArrayList()有以下区别:
1.List()是指定数据类型,较为安全 如List和List,当数据类型不对时会报错,限制数据类型确保了数据安全。而ArrayList()在使用Add()方法存储值类型时要将值类型转换为引用类型且同时可以存储引用类型,如string,是不安全的。
2.动态数组ArrayList()容量可以进行数组的扩容和缩容,静态数组List()需要事先指定数组容量。

数组对于值类型

List不发生装箱与拆箱

List<int> l = new List<int>();
            for (int i = 0; i < n; i++)
            {
                l.Add(i);   //不发生装箱
                int x=l[i]; //不发生拆箱
            }
         

ArrayList发生装箱与拆箱

  ArrayList a = new ArrayList();
            for (int i = 0; i < n; i++)
            {
                a.Add(i);        //发生装箱
                int x=(int)a[i]; //发生拆箱
            }
           

数组对于引用类型

List不发生装箱与拆箱

 List<string> l2 = new List<string>();
            for (int i = 0; i < n; i++)
            {
                l2.Add("X");       //不发生装箱
                string x = l2[i];  //不发生拆箱
            }
         

ArrayList不发生装箱与拆箱

 ArrayList a2 = new ArrayList();
            for (int i = 0; i < n; i++)
            {
                a2.Add("X");              //不发生装箱 
                                          // 键盘F12 查看string为引用类型 add()装入ArrayList不发生装箱与拆箱
                string x = (string)a2[i]; //不发生拆箱
            }
           

总结

1.装箱与拆箱是针对于值类型,引用类型不发生装箱与拆箱
2.如果发生装箱与拆箱,加入时间测试,所需要消耗的时间是不发生装拆箱的大约15倍,极大的消耗了时间,应注意。

你可能感兴趣的:(c#编程基础,c#)