2016-07-16 64 views
0

我有這樣的代碼:如何將類實例變量只讀作爲外部類的變量,但其成員是可讀/寫的?

struct Three 
{ 
    public int Number; 
} 

class One 
{ 
    public Three three; 
    public One(){three = new Three();} 
} 

class Two 
{ 
    private One test = new One(); 

    public void SomeFunction() 
    { 

    test.three.Number = 5; // This works fine 
    } 
} 

但我只需要允許類一款能夠直接寫入三個變量(做的東西像這三=新三()),所以類兩個不能這樣做:test.three = new Three();但它應該能夠做到這一點test.three.Number = 5; (如在該結構的該實例變化值),所以我這樣做:

struct Three 
{ 
    public int Number; 
} 

class One 
{ 
    public Three three {private set; get;} 
    public One(){three = new Three();} 
} 

class Two 
{ 
    private One test = new One(); 

    public void SomeFunction() 
    { 

    test.three.Number = 5; // This says i can't modify the return value because it is not a variable 
    } 
} 
+0

。如果你把它改成「class」,那麼它就可以工作。 – 2016-07-16 12:58:12

回答

0

public Three three { private set; get; }是一個屬性,ThreeValue-Type(又名Struct),該屬性的get返回它的一個拷貝,而不是實際引用類One所屬的實例。

因此,您需要創建一個新副本,如test.three = new Three() { Number = 5 };,並將private set更改爲public;

或將Three更改爲Class,以便通過引用來處理它,並能夠通過引用由get返回的實例來更改其屬性。因爲「結構」,因此可以使用

相關問題