Właściwie wolę drugi styl jako metoda jest mutator, stąd nowa wartość nie należy się spodziewać, aby być zwrócony, zamiast oczekuje się, że rzeczywista wartość zostanie zmodyfikowana. Jednak może być konieczne wskazanie, że ModifyIt akceptuje zmienną ref tylko w celu wskazania, że rzeczywiste c zostanie zmodyfikowane. c tutaj jest przekazywane przez wartość, chociaż jest to typ odniesienia, nadal istnieje różnica między przekazywaniem typów referencyjnych przez wartość i przekazywaniem typów referencji przez ref. Zobacz:
public void ModifyIt(Myclass c) { c = new MyClass(); }
w powyższym przypadku zmienna c będą przekazywane przez wartość (tj odpis z odniesieniem będą przekazywane i modyfikowane, aby wskazywał na nowo instanitiated obiektu, co z kolei oznacza, że będzie miał dwa obiekty typu MojaKlasa w tym przypadku Oto przykład, aby zilustrować.
Myclass s = new MyClass() { prop = "value" }; ModifyIt(s); Console.WriteLine(s.prob); // this will print "value"
chociaż MOdifyIT instanitaited się referenct do nowego obiektu, który powinien oznaczać, że prob zostaną zainicjowane na wartość null, to faktycznie nie zrobił” t tworzenie instancji, tworzyło kopię s. w odróżnieniu od ca se, jeżeli s zostało przekazane przez ref.
Mam nadzieję, że to pomoże!
Dlaczego przekazujesz "Class x" jako parametr do ModifyIt()? Czy twoja metoda nie może po prostu wziąć instancji Class jako "this"? Biorąc pod uwagę kod, wszystkie pozostałe odpowiedzi dotyczące łańcucha nie zadziałają. Dla mnie pytanie brzmi, czy twoja klasa jest bardziej typu wartościowego, w takim przypadku nie powinieneś modyfikować swoich instancji, a raczej zwrócić nową z wynikiem operacji. – van