2016-10-02 80 views
1

让我解释一下我的意思。说我有一个对象在C#中,如何返回对象的属性引用?

public class Foo 
{ 
    public int Val { get; set; } 
} 

和其他类似

public class Bar 
{ 
    public Foo Reference { get; set; } 
} 

比方说,我有

Bar mybar = new Bar() { Reference = new Foo() { Val = 69 } } 

,我想暂时设置

mybar.Reference = null; 

然后将其设置回原来的样子。好了,我不能这样做

var temp = mybar.Reference; 
mybar.Reference = null; 
mybar.Reference = temp; 

因为上面套tempnull的2号线。那么,我该怎么做我想做的事?

+0

“因为上面套临时的第2行空” - 什么? - 'mybar.Reference = null;'不能改变'temp'的值。请提供证明您看到的行为的[MCVE]。 –

回答

1

不,你可以这样做,它会工作。

引用类型与您的Foo一样,仅包含对实际对象的“引用”。所以属性Bar.Reference包含的内存地址为Foo的实际对象。

您的代码:上述

var temp = mybar.Reference; 

代码将 “存贮器地址/参考” 复制到变量temp
现在指向存储器中的相同对象tempmybar.Reference

mybar.Reference = null; 

以上代码设置变量mybar.Referencenull,现在mybar.Reference指点“无门”,但是请注意,这temp还是要原来的对象的引用。

mybar.Reference = temp; 

最后一行复制“内存地址”从temp回到mybar.Reference