class
Program
{
[Serializable]
public
class
Car
{
public
string
name;
public
Car(
string
name)
{
this
.name = name;
}
}
[Serializable]
public
class
Person:ICloneable
{
public
int
id;
public
string
name;
public
Car car;
public
Person()
{
}
public
Person(
int
id,
string
name, Car car)
{
this
.id = id;
this
.name = name;
this
.car = car;
}
public
Object Clone()
{
return
this
.MemberwiseClone();
}
}
public
static
T Copy<T>(T RealObject)
{
using
(Stream objectStream =
new
MemoryStream())
{
IFormatter formatter =
new
BinaryFormatter();
formatter.Serialize(objectStream, RealObject);
objectStream.Seek(0, SeekOrigin.Begin);
return
(T)formatter.Deserialize(objectStream);
}
}
static
void
Main(
string
[] args)
{
Person p1 =
new
Person(1,
"Scott"
,
new
Car(
"宝马"
));
Console.WriteLine(
"原始值:P1:id={0}----------->name={1}------>car={2}"
, p1.id, p1.name, p1.car.name);
Person p2 = Copy<Person>(p1);
Person p3 = p1.Clone()
as
Person;
Console.WriteLine(
"改变P1的值"
);
p1.id = 2;
p1.name =
"Lacy"
;
p1.car.name =
"红旗"
;
Console.WriteLine(
"P1:id={0}----------->name={1}------>car={2}"
, p1.id, p1.name, p1.car.name);
Console.WriteLine(
"深度复制:P2:id={0}----------->name={1}------>car={2}"
, p2.id, p2.name, p2.car.name);
Console.WriteLine(
"浅表复制:P3:id={0}----------->name={1}------>car={2}"
, p3.id, p3.name, p3.car.name);
Console.ReadKey();
}