首页 > 开发 > 综合 > 正文

C#中深拷贝和浅拷贝的例子

2024-07-21 02:26:41
字体:
来源:转载
供稿:网友


c#中有两种类型变量,一种是值类型变量,一种是引用类型变量。对于前者,copy是属于全盘复制;
而对于后者,一般的copy只是浅copy,相当于只传递一个引用指针一样。因此对于后者进行真正copy的时候,也是最费事的,具体的说,必须为其实现icloneable接口中提供的clone方法,示例代码如下:

public class test
{    
    
public class person : icloneable
    {
        
public int id;
        
public int age;
        
public void show()
        {
            console.writeline(
"id:{0} 年龄:{1}",id, age);
        }
        
public object clone()
        {
            person newperson 
= new person();
            newperson.id 
= this.id;
            newperson.age 
= this.age;      
            
return newperson;
        }
    }
    
public static void showpersons(person[] persons)
    {
        
for (int i=0; i<persons.getlength(0); i++)
        {
            persons[i].show();
        }
    }
    
static void main(string[] argv)
    {
        random rnd 
= new random(unchecked((int)datetime.now.ticks));
        person[] persons 
= new person[4];
        
for (int i=0;i<persons.getlength(0);i++)
        {
            persons[i] 
= new person();
            persons[i].id 
= rnd.next()%10;
            persons[i].age 
= rnd.next()%50;
        }
        
//打印原始数组
        console.writeline("打印原始数组");
        showpersons(persons);
        
//深拷贝
        person[] personscopied = new person[4];
        
for (int i=0;i<personscopied.getlength(0);i++)
        {
            personscopied[i] 
= (person)persons[i].clone();
        }
        
//persons.copyto(personscopied, 0);
        console.writeline("深拷贝的数组");
        showpersons(personscopied);
//      //浅拷贝
//      person[] personscloned = (person[])persons.clone();
//      console.writeline("浅拷贝的数组");
//      showpersons(personscloned);
        
//对原数组做修改
        persons[2].id += 10;
        console.writeline(
"打印修改后的原始数组");
        showpersons(persons);
        console.writeline(
"深拷贝的数组应该不改变");
        showpersons(personscopied);
//      console.writeline("浅拷贝的数组应该改变");
//      showpersons(personscloned);
    }
}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表