using System;namespace 原型模式之_浅表复制
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
// Resume a=new Resume("约定");
a.SetPersionalInfo("男","20");
a.SetWorkExperience("1998-2000","XX公司"); Resume b=(Resume)a.Clone();
b.SetWorkExperience("1998-2006","ZZ企业"); Resume c=(Resume)a.Clone();
c.SetWorkExperience("1998-2008","YY企业"); a.Display();
b.Display();
c.Display();
}
} class WorkExperience
{
        private string workDate;
public string WorkDate
{
get
{
return workDate;
}
set
{
workDate=value;
}
}
private string company;
public string Company
{
get
{
return company;
}
set
{
company=value;
}
}
}
class Resume:ICloneable
{
private string name;
private string sex;
private string age;
         private WorkExperience work; public Resume(string name)
{
this.name=name;
work=new WorkExperience();
}
public void SetPersionalInfo(string sex,string age)
{
this.sex=sex;
this.age=age;
} public void SetWorkExperience(string workDate,string company)
{
work.WorkDate=workDate;
work.Company=company;
}
public void Display()
{
Console.WriteLine(" {0} {1} {2} ",name,sex,age);
Console.WriteLine("工作经历: {0} {1} ",work.WorkDate,work.Company); }
public object Clone()
{
return(Resume)this.MemberwiseClone();
}
}
}大话设计模式里的代码.那个克隆有些不明白,
还有就是实例化resume类,最后显示出来的工作经历都只是YY企业.
运行出来就只有最后实例化的结果,为什么.
期待解答.

解决方案 »

  1.   

    ICloneable 这个接口里面有什么?这个也可以不管了但是
     Resume c=(Resume)a.Clone();
    你这个就是把a实例对象地址赋值给c 那么你操作c的内容的话 也就是操作a的内容 同时你的b也是相同的
    其实说到这个的话,也需要说一下 值类型和引用类型的
    一般类的操作都是引用类型,所以你的b和c的操作都是把a赋值给他们,那么你操作的b和c 其实最终个都是a而已的
    所以你最后只有一个 ,就是你最后赋值的操作的内容的
      

  2.   

    public object Clone()
            {
                return(Resume)this.MemberwiseClone();
            }
    MemberwiseClone 创建当前对象的浅复制,拷贝非static的字段。
    对于值类型字段,逐位拷贝。对于引用类型字段,只拷贝引用本身,不拷贝引用所指向的对象。private WorkExperience work;
    Clone之后的对象b.work,c.work与a.work指向同一个WorkExperience实例。
      

  3.   

    哎,发现大话设计模式这书真的不行,现在已不想看了,还是看GOF的吧哎,今天看着看着,一个例子都没,才一两页就完了,我强烈昏倒
      

  4.   

    LZ可以用深拷贝使得最后的结果不会变成都是YY企业