在使第一个对象归零之前,从另一个对象的字段中分配一个对象的字段

时间:2017-04-19 13:11:53

标签: c# reference

我有一个即将被淘汰的类的实例(objA = null)。在此之前,我想将该对象的字段复制到我将保存的另一个实例(objB)。

如果我执行以下操作,objB保持其值后objA为空。

objB.field1 = objA.field1;
objB.field2 = objA.field2;
objB.innerClass = objA.innerClass;

然后......

objA = null;

如果其中一个字段是引用类型而不是值类型怎么办?这会有所作为吗?

2 个答案:

答案 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