Parameters passing in C#

0

witajcie potrzebuje lekkiej pomocy przy (wy)tlumaczenia przesylania parametrow

z tej stronki
http://www.yoda.arachsys.com/csharp/parameters.html

od momentu "Value parameters"

"By default, parameters are value parameters. This means that a new storage location is created for the variable in the function member declaration, and it starts off with the value that you specify in the function member invocation. If you change that value, that doesn't alter any variables involved in the invocation. For instance, if we have: "

kod 1

i pozniej

"The value of y isn't changed just because x is set to null. Remember though that the value of a reference type variable is the reference - if two reference type variables refer to the same object, then changes to the data in that object will be seen via both variables. For example: "

kod 2

czy moze ktos przetlumaczyc te fragmenty
nie rozumiem dlaczego w pierwszym kodzie wartosc w 'y' nie zostala null
w drugim kodzie dodany zostal lancuch bez zadnych przeszkod

0

chodzi o to, że w pierwszym przykładzie zmieniłeś referencje do x na null, czyli straciłeś dostęp do oryginalnej zawartości w funkcji i tyle.

W 2 przykładzie zamiast zmieniać referencję zmieniłeś zawartość obiektu, dlatego zmiana została uwzględniona.

y-> obszar_pamieci_1
Foo (y);
x-> obszar_pamieci_1
x=null
x->nieokreślony obszar pamięci
//poza Foo (y);
y-> obszar_pamieci_1

y-> obszar_pamieci_1
Foo (y);
x->obszar_pamieci_1
x.Append(); // to samo co obszar_pamieci_1->Append();
x->obszar_pamieci_1
//poza Foo (y);
y-> obszar_pamieci_1

//obszar_pamieci_1 zostal zmieniony

0

Dokladnie tak jak kolega wyrzej to przedstawil :)

Jesli przekazujesz referencje do obiektu jako parametr to referencja jest kopiowana jako parametr (chociaz wskazuje na ten sam fizyczny obiekt). Jesli teraz zmieniasz ta referencje, a jest to kopia, to wartosc poprzedniej referencji nie zostanie zmieniona.

Sproboj teraz po prostu zrobic to samo ze slowkiem kluczowym ref :) Wynik bedzie zupelnie inny, gdyz parametr bedzie ta sama referencja. Jesli nie programowales wczesniej w C++ i nie bawiles sie wskaznikami to niestety nie bedzie Ci tak latwo to zrozumiec :/

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