请问,C#里浅拷贝是新建一个对象,然后原对象的字段是值类型就复制值,原对象的字段是引用类型就复制地址。深拷贝则是新建一个对象,然后原对象的字段是值类型就复制值,原对象的字段是引用类型的话新对象就在托管堆新开辟一个内存存放引用类型字段的值,是不是这样理解呢?
解决方案 »
- VC中Interior变量的声明
- 模态窗体增删改之后,主窗体数据不能及时更新!!使用ASpNetPager,修改数据或者查看时,都不能及时更新!!请教高手!!
- 请问asp.net需要输入很多内容,会出现超时的现象,有什么好办法解决吗?
- 如何用.Net生成并打印一张单据
- NavigateUrl参数传递问题.
- Repeater中嵌套使用Repeater为何里面的Repeater绑定数据时使用"[\"label\"]" ?
- 高分求教,如何解决页面定时回传
- 问个关于回收的问题!!请详细说明一下好吗?
- mvc 链接出问题
- 关于把freetextbox置为只读的问题!(在线)
- InvalidOperationException: 未能映射路径“/”。
- 怎么单击button改变背景色?
b.深拷贝(Deep Copy 深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.完全产生新对象。
{
public string Text;
}
class Test:ICloneable
{
public A a = new A();
public object Clone()
{
return this.MemberwiseClone();
}
} protected void Page_Load(object sender, EventArgs e)
{ Test t = new Test();
t.a.Text = "A"; Response.Write(t.a.Text);
Test t1 = (Test)t.Clone();
t.a.Text = "B"; Response.Write(t1.a.Text);
}看上面的例子,t.Text的值变成B了,t1是在改变之前Clone的,结果t1的值也是B
==>
不是被copy对象,而是被copy对象中的属性,字段等是对象类型的时候才引用地址。
{
public int age;
public student(int i)
{
age = i;
}
}
class Program
{
static void Main(string[] args)
{
student s1 = new student(22);
student s2 = s1;
s2.age = 27;
Console.WriteLine(s1.age);
Console.Read();
}
}这样输出的是27哦。。
指向s1
所以我就很奇怪为什么这里的浅拷贝是复制对象地址而memberwiseclone的浅拷贝是初始化一个新对象了。。