深入C#数据类型
再谈封装
封装又称信息隐藏,指利用抽象类型把应有的数据类型及数据操作结合为一个不可分割的实体,只保存数据对外的借口,尽可能的隐藏内部的细节
封装=数据类型+数据操作
值类型和引用类型
值类型
在Java中,int double char float short Boolean byte long都是值类型而其他的都是引用类型
在C#中,除这八种类型外,枚举类(enum)和结构体都是值类型
类,数组,借口是引用类型
在内存角度考虑值类型和引用类型
在内存中,开辟的变量只是在栈上开辟了一块内存地址,把值也存在了栈上 ,当另一个变量b被此变量a赋值时,b变量会在去栈上找到a的内存地址下的值而不会去新开辟地址
引用类型
引用类型以数组为例,如果数组a在栈上开辟了空间并且在堆上存了真实值,这个时候数组b=数组a赋值是,相当于把a的地址给了b,数组b会拿着相同的内存地址去找堆上值,结果数组a和b就是相同的值了。
当数组b=new 数组b的时候就在栈上开辟了新的内存地址在堆上也有了相应的空间来存值,这个时候数组b=数组a赋值就不会把a的值给b数组,而数组b就用了自己的值
结构体
构造函数
Class Player
{
public Player(){}
}
在一个类中,一个方法的名称可以和类名相同,并且可以没有任何返回值。
装箱和拆箱
拆箱之前必须有装箱过程,没有任何的疑问!!!
值传递和引用传递
值传递: 值类型(不加ref) 值不会被改变 引用类型(不加ref) 值会改变
引用传递: (无论加不加ref)值类型还是引用类型都会被改变