1.序列化 (序列化就是指将一个类或者其他东西以二进制文件的方式存储在硬盘中,用的时候再转换回来)
<1> 在类的前面加[Serializable],表示这个类可以序列化。
------------>对象的序列化
直接将对象变成二进制的数据,写到硬盘中
1、加标记[Serializeable] (可序列化的意思)
2、使用FileStream
3、使用序列化对象BinaryFormatter (二进制格式的意思)
[Serializable]
class Person
{
}
List<Person> personList;
using(FileStream f = new FileStream("1.dat", FileMode.Create, FileAccess.Write))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(f, personList);
}
------------>取出序列化的对象
using (FileStream f = new FileStream("1.dat", FileMode.Open, FileAccess.Read))
{
BinaryFormatter bf = new BinaryFormatter();
personList = (List<Person>)bf.Deserialize(f);
}
2.浅拷与深考
<1>浅拷就是对两个实例化出来的类,将第一个类的值赋值给第二个,但不能复制引用类型。共用引用类型,引用类型的值不会改变。
class myclass
{
public double dNum;
}
class MyClass1
{
public int Num;
}
myclass m1 = new myclass();
myclass m2 = new myclass();
m1.dNum = 1;
m2.dNum = m1.dNum;
<2>深考就是直接将值和引用类型完全复制一份,和前面的实例化出来的c1将没有任何关系。
class MyClass2
{
public int Num;
public MyClass1 C;
}
MyClass2 m2 = new MyClass2();
m2.Num = m1.Num;
m2.C = m1.C;
<3>clone方法进行浅考
class MyClone
{
public double dNum;
public MyClass1 C;
public MyClone Clone()
{
// 由object提供的方法完成浅拷贝
return (MyClone)base.MemberwiseClone();
}
}
MyClone c1 = new MyClone();
c1.dNum=25.0;
c1.C.Num=10;
MyClone c2 = c1.Clone();//这样就能完成c2对c1的浅拷贝。
<4>clone方法进行深考
public MyClone DeepoClone()
{
MyClone m = (MyClone)MemberwiseClone();
m.C = new MyClass1();
m.C.Num = this.C.Num;
return m;
//可以完成深拷贝
}
MyClone c1 = new MyClone();
c1.dNum=25.0;
c1.C.Num=10;
MyClone c3 = c1.DeepoClone();//完成深拷贝。
<5>FileStream序列化方法完成深考
MyClone m1 = new MyClone();
m1.Num = 10;
m1.dNum = 20.1;
m1.str = "字符串";
m1.C = new MyClass1();
m1.C.Num = 30;
// 将对象二进制化
using (FileStream file = new FileStream("data.dat", FileMode.Create, FileAccess.Write))
{
BinaryFormatter format = new BinaryFormatter();
format.Serialize(file, m1);
}
MyClone m2 = null;
using (FileStream reader = new FileStream("data.dat", FileMode.Open, FileAccess.Read))
{
BinaryFormatter format = new BinaryFormatter();
m2 = (MyClone)format.Deserialize(reader);
}
<6>MemoryStream序列化方法完成深考
MyClone m3 = null;
MemoryStream stream = new MemoryStream();
using (stream)
{
BinaryFormatter bin = new BinaryFormatter();
bin.Serialize(stream, m1);
stream.Position = 0;
m3 = (MyClone)bin.Deserialize(stream);
}
3.获得当前路径
<1>使用Directory类,这种方法因为有个SetCurrentDirectory方法可以设置工作路径,
所以加入调用了SetCurrentDirectory方法,不能获得准确的工作路径
Directory.SetCurrentDirectory("G:\\");
string path = Directory.GetCurrentDirectory();
Console.WriteLine(path);
<2> Assembly.GetExecutingAssembly().Location可以获得准确的工作路径。
string s = Assembly.GetExecutingAssembly().Location;
Console.WriteLine(s);