Jeśli mamy referencje do danego obiektu i przesyłamy go przez wartość do metody to w metodzie jest kopia tej referencji do obiektu. I jeśli jest to kopia to czemu może zmieniać dane dla głównego obiektu?
Przesyłanie obiektu do metody
- Rejestracja: dni
- Ostatnio: dni
- Postów: 329
Referencja jest jak skierowanie do tego samego lekarza, nie ważne ilu różnym osobom, na każde zapytanie od odpowie ten sam specjalista. Jeśli chcesz innego rezultatu musisz mieć zupełnie nowe skierowanie, w C# służy do tego słowo kluczowe "new".
- Rejestracja: dni
- Ostatnio: dni
To jeśli wysyłam kopie referencji to jakby tworzę kopię głęboką? A jak wysyłam oryginał referencji wtedy tworzę kopię płytką?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Hong Kong
jesli to nie jest value type (jak struct, enum czy prymityw) to do funkcji zawsze wysylasz referencje a nie obiekt
- Rejestracja: dni
- Ostatnio: dni
jesli to nie jest value type (jak struct, enum czy prymityw) to do funkcji zawsze wysylasz referencje a nie obiekt.
Ale chyba kopie referencji?
- Rejestracja: dni
- Ostatnio: dni
Możesz wysłać referencje, albo jej kopie, ale nie obiekt.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 33
Zmienne definiowane jako klasa działają jako referencje do obiektu przechowywanego w pamięci. I to właśnie te zmienne wysyłasz czy kopiujesz.
- Rejestracja: dni
- Ostatnio: dni
Obiekt jest cały czas jeden dopóki go jawnie nie sklonujesz
Nie ma różnicy czy przesyłasz referencję czy kopię referencji - to nadal referencje do tego samego obiektu
- Rejestracja: dni
- Ostatnio: dni
Jeśli mam taką funkcję i przesyłam kopię referencji do obiektu klasy Osoba:
static void Funkcja(Osoba p)
p.wiek = 10;
p = new Osoba("Tadeusz",25);
to dlaczego do referencji p nie można przypisać nowej referencji?
- Rejestracja: dni
- Ostatnio: dni
Do p jak najbardziej możesz.
Ale dlatego, że przesyłasz kopię referencji, to zmiana ta nie jest widoczna na zewnątrz funkcji, bo zmieniasz tylko to na co wskazuje ta twoja lokalna kopia.
- Rejestracja: dni
- Ostatnio: dni
static void Funkcja(Osoba p)
{
p = new Osoba("Tadeusz",25);
p.wiek = 10;
}
To jak w funkcji zmienię to na co pokazuje kopia referencji i dalej wykonam instrukcję p.wiek = 10, to już nie powinno zmienić tego obiektu po za funkcją na wiek = 10, a jednak zmienia.