Witam! Jak to jest...skoro przekazuje obiekt do funkcji, to w funkcji jest jego kopia, ale dlaczego zmiana jakiegos pola tego obiektu w funkcji powoduje zmiane rowniez w oryginale ? Dopiero przypisanie mu nowrgo obiektu ni wprowadza zmian w oryginale?
0
0
Bo obiekt jest typem referencyjnym - zawsze się odwołujesz do orginalnego miejsca w pamięci i go edytujesz.
0
Do funkcji nie przekazujesz obiekt, a referencje, odwołanie do niego. Jest tylko jedna instancja.
0
Tzn, ze mimo ze kopia to jest pamietana jegp zawartosc. Czyli dziala tak, jakby np w funkcji do obiektu a przypisal b ?
0
to NIE JEST kopia obiektu, tylko wskażnik na ten obiekt. Przekazujesz wskaźnik, modyfikujesz oryginalny obiekt. Jeśli chcesz zrobić tak jak napisałeś "funkcji do obiektu a przypisal b" to musiałbyś skorzystać ze słowa kluczowego ref
1
Ergo
class C {
class A { public string B; }
void f(A objectWithFieldToUpdate, A objectToUpdate, ref A objectToUpdateByReference)
{
objectWithFieldToUpdate.B = "updated both inside and outside";
objectToUpdate = new A() { B = "updated inside, left untouched outside" };
objectToUpdateByReference = new A() { B = "updated both inside and outside" };
}
}
Pisane z palca.