值&&引用传递&&序列化
1.值类型复制时,传递的是值的本身。
2.引用类型在复制是,传递的是值的引用。(引用就是指地址)
注意:string s1 = "张三";
string s2 = s1;
s2 = "李四";
结果:s1是"张三";s2是"李四"。原因是:string类型的不可变性。每次重新赋值都会重新开辟一块内存空间。
person p1 = new person();//创建类对象
p1.name = "张三";
person p2 = new person();
p2= p1;
p2.name = "李四";(p1 ,p2都为“李四”;因为是引用类型)
3.ref修饰的参数,实现将值类型转变成引用类型。
int a = 10;
void get(ref int b);
get(a);//调用 a b 保存在栈上不同地址,ref修饰将a的地址拷贝给b,实现引用传递。
若没有ref修饰,a->b是值传递。只能将a的值传递个b。
4.序列化和反序列化
序列化:就是将对象转换成二进制
反序列化:就是将二进制转换成对象。
作用:传输数据(在传输数据过程中,需要将数据序列化,传输完成后,要反序列换将二进制码转换成数据)
序列化步骤:
1)[Serializable]修饰要序列化的类。
person p = new person("jefy" , 25 , '男');
using (FileStream fsWrite = new FileStream("third day.txt" ,FileMode.Append , FileAccess.Write))
{
//开始序列化
//创建序列化对象
BinaryFormatter bf = new BinaryFormatter();
//序列化,并把数据写入fsWrite中
bf.Serialize(fsWrite , p);
}
person p1 = null;
using (FileStream fsRead = new FileStream("third day.txt" , FileMode.OpenOrCreate , FileAccess.Read))
{
//开始反序列化
BinaryFormatter bfm = new BinaryFormatter();
p1=(person) bfm.Deserialize(fsRead);
}