2016-07-16 6 views
0

Ich habe Code wie folgt aus:Wie man eine Variable mit Klasseninstanz schreibgeschützt zu externen Klassen macht, aber ihre Mitglieder lesen/schreiben?

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 
    } 
} 

Aber ich brauche nur die Klasse erlauben man in der Lage zu sein, direkt in die schreiben drei Variablen (Sachen wie diese drei = new Drei() zu tun), so dass die Klasse zwei können das nicht tun: test.three = new Three(); aber es sollte in der Lage sein, dies test.three.Number = 5; (Wie in Änderungswerte in dieser Instanz dieser Struktur), so habe ich das:

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

wegen "struct". Wenn Sie es in "Klasse" ändern, funktioniert es. –

Antwort

0

public Three three { private set; get; } eine Eigenschaft ist und Three ist ein Value-Type (aka Struct), die get dieser Eigenschaft eine Kopie davon zurückgeben und nicht der tatsächliche Verweis auf die Instanz, die der Klasse One gehört.

So müssen Sie entweder eine neue Kopie wie test.three = new Three() { Number = 5 }; erstellen und die zu public ändern;

Oder Ändern Three zu einem Class, um damit als Referenz arbeiten und in der Lage sein, seine Eigenschaften durch den Verweis auf die von einem get zurückgegebene Instanz zu ändern.

Verwandte Themen