public class Person
{
    public Person(string fName, string lName)
    {
        this.firstName = fName;
        this.lastName = lName;
    }    public string firstName;
    public string lastName;
}public class People
{
    private Person[] _people;
    public People(Person[] pArray)
    {
        _people = new Person[pArray.Length];        for (int i = 0; i < pArray.Length; i++)
        {
            _people[i] = pArray[i];
        }
    } 
}
在People类的构造函数中,使用new运算符分配了内存,不过数组中的元素是引用类型的,貌似对于整个数组,是深拷贝,但对于数组中的每个元素是浅拷贝?这样有什么意义吗,为什么不进行彻底的深拷贝呢,或者直接在构造函数中把参数pArray赋给引用_people呢

解决方案 »

  1.   


    浅拷贝使用Object类MemberwiseClone实现  
    MemberwiseClone:创建当前 Object 的浅表副本
    浅拷贝(shallow copy)对于引用类型对象中的值类型字段进行了逐位复制。赋值运算符只是把源对象的引用赋值给目的对象,两者引用同一个对象。
    浅拷贝后的对象的值类型字段更改不会反映到源对象,而赋值运算后的对象的值类型字段更改会反映到源对象 
      

  2.   

    为什么不直接在构造函数中把参数pArray赋给引用_people呢,和代码中的方式有什么区别吗
      

  3.   

    现在这样的做法,很容易转换为深拷贝,只需要Person实现一个Clone方法,然后在复制的时候,调用这个Clone方法。