C#数据类型
一、值类型与引用类型
1、值类型:
存放地方:存放在内存的栈中
包括:简单类型(int 、double、float等)
结构类型(Struct types)
枚举类型(Enmu types)
2、引用类型:
存放地方:存放在内存堆中
包含:类,接口,数组,字符串
3、值类型与引用类型
特点 |
值类型 |
引用类型 |
存储位置 |
栈 |
堆 |
默认值 |
0 |
null |
传递给方法的参数 |
复制值 |
引用 |
变量储存的 |
实际值 |
引用地址 |
4、方法中参数的类型
值参数
利用值方式传递数,被调用的方法不会修改内存中的实参的值
引用参数(ref)
引用参数不开辟新的内存控件,调用带引用参数的方法可以在该方法 内部改变调用方法的参数值
输出参数(out)
仅用于从方法传递会一个结果(如sql存储过程中的output 参数)
5、在默认情况下,值类型的参数传递不会影响参数本身引用方式进行参数传递时会影响到参数本身,因为两个变量引用了内存中的同一块地址
6、params关键字与数组有关,修饰参数时,调用方法时既可以使用数组,也可以使用单个的值,单个值的个数不受限制
7、装箱和拆箱
装箱:值类型自动转化为引用类型
示例:int num=200;
Object obj=num;
拆箱:引用类型转化为值类型
示例:Object obj=200;
Int num=(int)obj;
装箱的弊端:消耗的时间比拆箱多
注:在程序中不要随意做装箱和拆箱操作
二、枚举-enum
枚举是一种特殊的值类型,用来定义一组常数。
枚举是一个指定的常数,其基础类型可以是任何整型,默认数据类型为int。
定义静态常量,且按照一定的顺序排列或者当参数、返回值、变量等类型可以是枚举时,不要使用其他基础类型,可以用枚举定义
定义限制:不能定义自己的方法,不能实现接口,不能定义属性或索引
枚举的声明:访问修饰符 enum 枚举名称
{
枚举成员,
枚举成员
}
注:成员之间用“ , ”分隔
示例:public enum Sex
{
Boy,
Girl
}
public struct StructStudent { public string name; public int Age; public string Hobby; public int Popularity; public void SayHi() { …. } } |
使用:
使用场景:
1) 定义静态常量,值按顺序排列
2) 成员可穷举
三、结构(值类型)
1、概念:是程序员自定义的、类似于类、实现方法与类不同的数据类型
2、与类比较
类 |
结构 |
引用类型 |
值类型 |
可赋初始值 |
声明字段不可赋初始值 |
可声明无参构造函数 |
不能声明无参构造函数 |
必须进行实例化 |
可以不用new进行实例化 |
能被继承除了sealed类 |
不能被继承 |
3、声明语法:
struct 名称
{
成员
}
注:成员为:字段、属性、方法、以及有参构造