Czarodziej0 napisał(a)
somekind napisał(a)
Referencja to nie jest wskaźnik.
Weź nie żartuj...
A czym się różnią???
Hmm... chyba tym, że nie są tym samym.
Referencja wskazuje miejsce obiektu typu referencyjnego w pamięci, a wskaźniki pozwalają operować na zmiennych typów wartościowych. Oprócz tego udostępniają arytmetykę i umożliwiają poruszanie się po pamięci, do tego wymagają bloków unsafe i kompilacji z takim też parametrem.
Już nie wiem czy mówimy o przykładzie luzika, czy Twoim na potrezeby własnych racji...
Nigdy jeszcze nie miałem potrzeby zastępować obiektu przekazanego do metody (bo niby czemu to miałoby służyć i po co tak robić?). Dlatego też nie byłem nawet świadomy jak zadziała metoda T1. Referencja to adres w pamięci, zatem operacje w metodzie dotyczą tego, co znajduje się pod tym adresem. Gdy przekazujemy zmienną typu referencyjnego do metody, to będziemy operowali (poprzez metody i właściwości) na tym samym obiekcie, który jest poza metodą, bez względu na to, czy użyjemy ref czy nie. Zgadza się?
Natomiast w dość egzotycznym przypadku, z jakim mamy do czynienia w metodzie T1, tworzony jest w niej lokalnie nowy obiekt, zatem przydzielany jest nowy obszar w pamięci i lokalna "klasa" referuje właśnie nie niego, natomiast poza metodą referencja pozostaje bez zmian. W T2 natomiast referencja przychodząca w parametrze metody jest nadpisywana. Tak przynajmniej to rozumiem, ale oczywiście mogę nie mieć racji, może Ty lepiej wyjaśnisz to zachowanie?
Tak czy siak trzeba o takim niuansie wiedzieć i pamiętać.
Zgadza się. to wszystko są obiekty.
Czyli się zgadzamy. :)
A sformułowanie obiekt struktury... hmmm... ciekawe, ciekawe...
Jednak nie? :(
Chyba nie nadążam za zmiennością Twojego nastroju.
Natomiast można porównywać klasy ze strukturami, ale porównywanie obiektów ze strukturami jest bez sensu.
Można powiedzieć, że marchewka jest tańsza i mniej trwała od butów. Ale nie ma sensu porównywać sklepu obuwniczego z marchewką.
owszem nie, nie to samo, ale nadal to struktura.
JEDYNA struktura, której można przypisać null.
A Ty napisałeś, że:
out jest trochę innego typu. pozwala ono przekazać do metody pustą (null) zmienną w celu zainicjalizowania jej w ciele metody
Więc w ogólnym przypadku Twoje twierdzenie nie jest prawdziwe, a dywagacje na temat Nullable za wiele nie wnoszą. Out po prostu pozwala na przekazanie do metody niezainicjalizowanej zmiennej (w przeciwieństwie do ref, które inicjalizacji wymaga).
A co do niezainicjalizowanych zmiennych, to nawet jakiś czas temu na forum była dyskusja w tej kwestii i jak się okazało, to nawet niezainicjalizowane zmienne typów referencyjnych nie mają wartości null. Po prostu są niezainicjalizowane.
Zajrzyj do dokumentacji.
Tym razem policzyłem do dziesięciu. Ale to jest rada na poziomie trolla z forum onetu. Na przyszłość daruj sobie. Dyskutujemy tutaj, ok?