.Net高级技术3.值类型和引用类型
C#中哪些类型属于值类型,哪些类型属于引用类型,
什么是装箱,什么是拆箱?
了解结构体,ref和out使用。
以上都是该段课程中需要掌握的内容。
什么是值类型:值类型均隐式派生自System.ValueType :类型 变量名=初始化值;
int num=90; num.GetType().Basetype()
值类型有哪些:数值类型、bool、结构、枚举查看IL,隐式继承自ValueType
什么是引用类型:引用类型派生自System.Object
引用类型有哪些:字符串、数组、类、接口等查看IL隐式继承自Object ;
引用类型变量的赋值只复制对对象的引用。
值类型变量赋值会拷贝一个副本。
值类型只在栈中存储,引用类型的变量名是存储在栈内存中,new 对象存储在堆内存中。
栈内存:值类型,变量名
堆内存:new 类
装箱和拆箱是怎么回事?前后类型必须一样
IL 中 有box 就发生了装箱,有unbox就发生了拆箱
有没有发生装箱,首先看有没有继承关系,int 和string之间没有继承类型
装箱在值类型向引用类型转换时发生(两者有明确的继承关系)
拆箱在引用类型向值类型转换时发生(两者有明确的继承关系)
-------------------------------------------------
结构体 :省空间可以使用。
在没有面向对象、在没有类的情况下如何组织一些相关的数据?
结构体: 一种值类型,拷贝副本。
注意: 对于结构,不像类那样存在继承。一个结构不能从另一个结构或类继承。但是,结构从基类 Object 继承。
结构只能实现接口,其方式同类完全一样;不能继承。
结构体是值类型,传值的时候拷贝的是副本
对于结构,不像类那样存在继承。
一个结构不能从另一个结构或类继承。但是,结构从基类 Object 继承(有object类的方法)。
结构可实现接口,其方式同类完全一样。
结构体大家了解即可。
-------------------------------------------------
ref 和out使用:
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。 2、使用ref和out时,在方法的参数和执行方法时,都要加ref或out关键字。以满足匹配。 3、out适合用在需要retrun多个返回值的地方, 而ref则用在需要被调用的方法修改调用者的引用的时候。
ref :
可以把值传到方法中,也可以把方法中的值返回来---〉可进可出的
传入的参数必须先初始化。
当参数个数 和类型一样时,只是ref 和 out 是不能构成重载的 。
使用ref传参数的时候,传入的参数必须先被初始化。
out:
把方法中的值传出去,外面调用变量可以没有初始值。
使用out传参数的时候,必须在方法中对其完成初始化。
使用ref和out时,在方法的参数和执行方法时,都要加ref或out关键字。以满足匹配。
out适合用在需要retrun多个返回值的地方,
而ref则用在需要被调用的方法修改调用者的引用的时候。
案例:
int n;
int.TryParse("sf",out n);
Console.WriteLine(n); //0默认值
如鹏网:http://www.rupeng.com