c#小技巧3
1. 深拷贝与浅拷贝
深拷贝,对对象整体进行拷贝包括对象的值数据和引用到的对象。
浅拷贝,只拷贝对象的非静态字段,如值类型数据。如果字段为引用字段那么只拷贝引用,因此引用到的对象还是原来的对象。
深拷贝,对对象整体进行拷贝包括对象的值数据和引用到的对象。
浅拷贝,只拷贝对象的非静态字段,如值类型数据。如果字段为引用字段那么只拷贝引用,因此引用到的对象还是原来的对象。
// 这个标志是必须的,告诉assembly该类可以序列化
[Serializable]
class Aphla
{
private string _name;
private Beta _beta;
public string Name
{
set { _name = value; }
get { return _name; }
}
public string BetaName
{
set { _beta.Name = value; }
}
public Aphla(Beta b)
{
_beta = b;
}
public void Display(string objName)
{
Console.WriteLine("{0}, {1}", objName, _name);
_beta.Display();
}
// 深拷贝对象
public Aphla Clone()
{
Aphla a;
// 创建流用于保存要被序列化的对象
MemoryStream ms = new MemoryStream();
// 创建二进制格式器,用于对序列化对象的流进行格式化
BinaryFormatter bf = new BinaryFormatter();
// 将指定的对象以创建的格式器序列到流中
bf.Serialize(ms, this);
// 将流的游标置回开始点
ms.Position = 0;
// 反序列化流到对象
a = (Aphla)bf.Deserialize(ms);
return a;
}
// 浅拷贝对象
public Aphla ShallowClone()
{
Aphla a = (Aphla)this.MemberwiseClone();
return a;
}
}
public class Beta
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public void Display()
{
Console.WriteLine("Beta: {0}", _name);
}
}
[Serializable]
class Aphla
{
private string _name;
private Beta _beta;
public string Name
{
set { _name = value; }
get { return _name; }
}
public string BetaName
{
set { _beta.Name = value; }
}
public Aphla(Beta b)
{
_beta = b;
}
public void Display(string objName)
{
Console.WriteLine("{0}, {1}", objName, _name);
_beta.Display();
}
// 深拷贝对象
public Aphla Clone()
{
Aphla a;
// 创建流用于保存要被序列化的对象
MemoryStream ms = new MemoryStream();
// 创建二进制格式器,用于对序列化对象的流进行格式化
BinaryFormatter bf = new BinaryFormatter();
// 将指定的对象以创建的格式器序列到流中
bf.Serialize(ms, this);
// 将流的游标置回开始点
ms.Position = 0;
// 反序列化流到对象
a = (Aphla)bf.Deserialize(ms);
return a;
}
// 浅拷贝对象
public Aphla ShallowClone()
{
Aphla a = (Aphla)this.MemberwiseClone();
return a;
}
}
public class Beta
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public void Display()
{
Console.WriteLine("Beta: {0}", _name);
}
}
将想法付诸于实践,借此来影响他人是一个人存在的真正价值