Przesyłanie obiektu do metody

Przesyłanie obiektu do metody
  • Rejestracja: dni
  • Ostatnio: dni
0

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?

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
0

Bo to kopia referencji a nie kopia obiektu?

T9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 329
1

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
0

To jeśli wysyłam kopie referencji to jakby tworzę kopię głęboką? A jak wysyłam oryginał referencji wtedy tworzę kopię płytką?

katelx
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Hong Kong
0

jesli to nie jest value type (jak struct, enum czy prymityw) to do funkcji zawsze wysylasz referencje a nie obiekt

  • Rejestracja: dni
  • Ostatnio: dni
0

kopie referencji albo oryginał referencji

  • Rejestracja: dni
  • Ostatnio: dni
0

jesli to nie jest value type (jak struct, enum czy prymityw) to do funkcji zawsze wysylasz referencje a nie obiekt.

Ale chyba kopie referencji?

SO
  • Rejestracja: dni
  • Ostatnio: dni
0

Możesz wysłać referencje, albo jej kopie, ale nie obiekt.

PP
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 33
0

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
0

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
0

Jeśli mam taką funkcję i przesyłam kopię referencji do obiektu klasy Osoba:

Kopiuj
static void Funkcja(Osoba p)
p.wiek = 10;

p = new Osoba("Tadeusz",25); 

to dlaczego do referencji p nie można przypisać nowej referencji?

SO
  • Rejestracja: dni
  • Ostatnio: dni
0

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
0
Kopiuj
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.

  • Rejestracja: dni
  • Ostatnio: dni
0

Jednak wtedy już nie zmienia czyli jest ok.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.