C#基础的问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 17:51:35
请问:C#里值类型和引用类型的区别,装箱与拆箱的区别。俺是新手,请勿ctrl+ctrlv,3ks大虾们。

C#中值类型和引用类型的区别:
值类型:是存放在内存的栈区;所谓内存的栈区你可以理解为,是内存中一块空间。比如int i=5;这个变量是所属值类型,所以存放在内存的栈区域,当你想要修改这个栈区域变量的值,只能修改变量i 的值。
引用类型:是存放在内存的堆区;所谓内存的堆区也是内存中的一块空间,只是和栈区是区别开来的。比如:一个类Person,实例化一个对象:Person p=new Person();
p.age=10;//假设age是它的成员变量,它是存放在内存的堆区的。它是通过引用 ,相当于指针来指向它所要的值。那么我们可以通过它自身p对象来修改这个成员变量age的值,也可以通过另外一个对象来修改,Person p1=new Person()
p1=p;
p1.age=100;
这个时候p.age的值也会由10改为100.

装箱:是指将值类型转化为引用类型。
例如:int i=5;
Person p=new Person();
p.age=(Person)i;

拆箱:和装箱刚好相反,是将引用类型转化为值类型。
例如:Person p=new Person();
p.age=100;
int i=p.age;

传递一个值类型的变量时,就是传递该变量的值而不是传递它的基础对象引用。
值类型与引用类型的根本区别在于:值类型的变量包含自身的数据,而引用类型的变量包含的是指向包含数据的内存块的引用。
装箱是值类型转换为object类型,是一个数值分配一个对象实例,并把这个数值拷贝到新的对象;拆箱是将object类型转换为值类型。

值类型和引用类型最主要是在传参的时候用到的
值类型传的是值 比如 a=5 b=a 那么a和b只是在数值上相等 改变了b的值对a没有影响
引用类型传的是地址 比如a=new form(); 这时候a里面存的是new form()在堆里面的地址