W jakich sytuacjach stosuje się ref

0

Jeśli mam typy proste: int, char, string, double to rozumiem użycie ref. Normalnie bez ref zmienne są kopiowane przy przekazywaniu ich do funkcji. Z dopiskiem ref stają się aliasem i można je modyfikować. Jednak co się dzieje jak się napisze ref moj_jakis_obiekt_klasy? Przecież w c# wszystkie obiekty są przekazywane przez referencję i można je zmieniać. Jaki to ma sens? Ktoś mi wytłumaczy?

0

Użycie ref powoduje, że metoda pracuje na oryginale referencji, a nie jej kopii.

void a(moj_obiekt arg)
{
    arg = new moj_obiekt();
}

void b (ref moj_obiekt arg)
{
    arg = new moj_obiekt();
}

moj_obiekt obj = null;
a(obj);
//tu obj nadal pokazuje na null
b(obj);
//to obj pokazuje na instancję klasy moj_obiekt stworzoną w metodzie b

Zadajesz pełno trywialnych pytań na które odpowiedź jest w każdym tutorialu, albo wystarczy odpalić kompilator i sprawdzić zachowanie... Więc lepiej zrób tak, a nie pytaj za chwile co robi out

0

Użycie ref powoduje, że metoda pracuje na oryginale referencji, a nie jej kopii.

Zgoda, ale dla typów prostych.
Poprawiam twój kod:

void a(Moja_Klasa moj_obiekt)
{
    moj_obiekt= new Moja_Klasa();
}
 
void b (ref Moja_Klasa moj_obiekt)
{
    moj_obiekt= new Moja_Klasa ();
}
 

Moja_Klasa moj_obiekt= null;
a(moj_obiekt);
//tu obj nadal pokazuje na null
b(ref moj_obiekt);
//to obj pokazuje na instancję klasy moj_obiekt stworzoną w metodzie b

Tu masz rację, ale:
zrób sobie tak:

zrobcos(RichtextBox richtextbox1)
{
      richtextbox1.AppendText("wykonałem zadanie");
}

Dlaczego to wyświetla tekst w richtextboxie1? Dlaczego to działa?
Ok już wszystko rozumiem. Chodzi tu o klonowanie referencji a nie obiektu.

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