我有一个即将被淘汰的类的实例(objA = null)。在此之前,我想将该对象的字段复制到我将保存的另一个实例(objB)。
如果我执行以下操作,objB保持其值后objA为空。
objB.field1 = objA.field1;
objB.field2 = objA.field2;
objB.innerClass = objA.innerClass;
然后......
objA = null;
如果其中一个字段是引用类型而不是值类型怎么办?这会有所作为吗?
答案 0 :(得分:1)
这很容易测试。我有一个例子(SomeProp是int?
):
private int? Q = 5;
private void button_Click(object sender, RoutedEventArgs e)
{
MyClass a = new MyClass();
a.SomeProp = Q;
MyClass b = new MyClass();
b.SomeProp = a.SomeProp;
a = null;
MessageBox.Show( b.SomeProp.ToString() ); //Outputs 5
Q = null;
MessageBox.Show( b.SomeProp.ToString() ); //Still outputs 5
}
我尝试了完全相同的代码但是使用字符串,输出没有区别。
答案 1 :(得分:0)
原语(值类型)将分配内存。
引用类型将在内存中有一个地址。当您为另一个引用类型指定另一个对象的值时,该值将仅指向内存中的地址。
将Reference类型设置为null后,任何指向该地址的指针都将返回null。
这里可以找到一个很好的解释: Primitive Types and Reference Types