2017-04-19 25 views
0

我有一个即将被清除的类的实例(objA = null)。在此之前,我想将该对象的字段复制到另一个我将保存的实例(objB)中。在将第一个对象置零之前从另一个对象的字段中分配一个对象的字段

如果我做了以下将objB保持其值objA为空后的值。

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

再后来......

objA = null; 

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

+2

您是否尝试过? –

回答

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 
} 

我试图完全相同的代码,但使用串,在输出没有差别。

0

基元(值类型)将分配内存。

引用类型将在内存中有一个地址。当您为另一个引用指定另一个对象的值时,该值将指向内存中的地址。

将Reference类型设置为null后,指向该地址的任何指针都将返回null。

一个很好的解释可以在这里找到: Primitive Types and Reference Types

相关问题