Loading Likes...
Cześć.
W tym artykule dowiesz się w jaki sposób przekazać do metody argument przez referencję i jakie będą tego skutki. Zaczynamy.
Przede wszystkim napiszmy sobie prostą metodę w projekcie konsolowym (bez wykorzystania referencji), która będzię na wejściu miała liczbę całkowitą a na wyjściu wartość pomniejszoną o 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace wiedza_referencja { class Program { static void Main(string[] args) { int x = 5; Console.WriteLine("Przed wywyołaniem metody: "+x); Sub(x); Console.WriteLine("Po wywołaniu metody: "+x); Console.ReadKey(); } static void Sub(int y) { y--; Console.WriteLine("Argument z wnętrza metody: "+y); } } |
Uruchamiamy nasz program i na wyjściu otrzymujemy:
|
Przed wywyolaniem metody: 5 Argument z wnetrza metody: 4 Po wywolaniu metody: 5 |
Okej, wiemy zatem jak działa nasz program, teraz go delikatnie zmodyfikujemy wykorzystując właśnie omawianą referencję. W deklaracji oraz przy wywołaniu funkcji Sub dopisujemy słowo kluczowe “ref” przed typem argumentu x.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace wiedza_referencja { class Program { static void Main(string[] args) { int x = 5; Console.WriteLine("Przed wywyołaniem metody: "+x); Sub(ref x); Console.WriteLine("Po wywołaniu metody: "+x); Console.ReadKey(); } static void Sub(ref int y) { y--; Console.WriteLine("Argument z wnętrza metody: "+y); } } } |
Otrzymujemy teraz:
|
Przed wywyolaniem metody: 5 Argument z wnetrza metody: 4 Po wywolaniu metody: 4 |
Jak widzisz, wywołując metodę Sub z paramentrem referencyjnym zmieniliśmy w prosty sposób wartość zmiennej x. Dzięki takiemu rozwiązaniu uniknęliśmy deklarowania kolejnej zmiennej. Porównaj teraz sobię wersję alternatywną z powyższą.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace wiedza_referencja { class Program { static void Main(string[] args) { int x = 5; Console.WriteLine("Przed wywyołaniem metody: "+x); int y = Sub(x); x = y; Console.WriteLine("Po wywołaniu metody: "+x); Console.ReadKey(); } static int Sub(int y) { y--; Console.WriteLine("Argument z wnętrza metody: "+y); return y; } } } |
Output:
|
Przed wywyolaniem metody: 5 Argument z wnetrza metody: 4 Po wywolaniu metody: 4 |
Reasumując, dzięki referencji możemy w prosty sposób operować na zmiennych wcześniej zadeklarowanych, bez potrzeby tworzenia nowych zmiennych i przepisywania ich wartości.
Pasjonat informatyki, bloger.
Full-stack Developer
Technologie:
- ASP.NET MVC
- ASP.NET CORE
- Angular 2+
Świetny wpis, konkretny i klarowny.
Czy istnieje możliwość aby utworzyć metodę referencyjną, a wywoływać ją zależnie od potrzeb z ref lub bez? Tak aby przy ww wymienionym przykładzie Sub(x); zwracało 5, natomiast Sub(ref x); zwracało 4. Pozdr.,
Nie wiem czy dobrze Cię zrozumiałem. Mógłbyś dopisać metodę o tej samej nazwie ale z innymi parametrami. 🙂