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