2016-10-02 74 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