różnica w zachowaniu struktury i klasy

0

Witam. Czy mógłby mi ktoś wytłumaczyć z czego wynika poniżej przedstawiona różnica w zachowaniu struktury i klasy?
Mamy taki kod:

public class A
    {
        public int X { get; private set; }
        
        public void SetX(int x)
        {
            X = x;
        }
    }

    public class B
    {
        public A propA { get; private set; }

        public B()
        {
            propA = new A();
        }
    }

//dalej w Main:
B testB = new B();
testB.propA.SetX(3);

i teraz wartość właściwości B.propA.X wynosi 3
ale jeśli klasę A zamienimy na strukturę a resztę pozostawimy tak samo to wartości właściwości B.propA.X nie można zmienić - pozostaje domyślna.
I pytanie czemu w tym wypadku zachowanie struktury i klasy się różnią?
I czy można jakoś to obejść inaczej niż ponowna inicjalizacja propA za pomocą konstruktora z parametrem?

2

Struktura jest typem wartościowym, właściwości są metodami.
Także getter propA zwraca kopię struktury A, i metodę SetX wywołujesz na kopii która nie ma już nic wspólnego z wartością trzymaną w instancji klasy B.
Zamiast właściwości możesz upublicznić pole, wtedy zamiast na kopii będziesz operował na oryginale.

1 użytkowników online, w tym zalogowanych: 0, gości: 1