Ćwiczenie — zwracanie wartości i parametrów metod
- {liczbaMinut} minut
W poprzedniej lekcji użyto scenariusza kodowania "rzutu kostką", aby zilustrować różnicę między metodami stanowymi (wystąpienie) i bezstanowymi (statycznymi). Ten sam scenariusz może pomóc zrozumieć inne ważne pojęcia dotyczące wywoływania metod. Przykład:
- obsługa zwracanej wartości metody.
- parametry metody i przekazywanie argumentów do metody.
- wybieranie przeciążonej wersji metody.
Wartości zwracane
Niektóre metody zostały zaprojektowane w celu ukończenia działania funkcji i „cichego” zakończenia pracy. Innymi słowy, nie zwracają wartości po zakończeniu. Są one nazywane metodami void.
Inne metody są przeznaczone do zwracania wartości po zakończeniu. Wartość zwracana jest zazwyczaj wynikiem operacji. Wartość zwracana to podstawowy sposób przekazywania metody z powrotem do kodu, który wywołuje metodę .
Zobaczyliśmy, że Random.Next() metoda zwraca int typ zawierający wartość losowo wygenerowanej liczby. Można jednak zaprojektować metodę w celu zwrócenia dowolnego typu danych, nawet innej klasy. Na przykład String klasa ma kilka metod, które zwracają ciąg, niektóre, które zwracają liczbę całkowitą, a niektóre, które zwracają wartość logiczną.
Podczas wywoływania metody zwracającej wartość często przypisujesz wartość zwracaną do zmiennej. W ten sposób możesz użyć wartości w dalszej części kodu. W scenariuszu kości przypisano wartość Random.Next() zwracaną do zmiennej roll :
int roll = dice.Next(1, 7);
W niektórych przypadkach możesz chcieć użyć wartości zwracanej bezpośrednio bez przypisywania jej do zmiennej. Na przykład możesz wydrukować wartość zwracaną w konsoli w następujący sposób:
Console.WriteLine(dice.Next(1, 7));
Mimo że metoda zwraca wartość, można wywołać metodę bez użycia wartości zwracanej. Można na przykład zignorować wartość zwracaną, wywołując metodę w następujący sposób:
dice.Next(1, 7);
Jednak ignorowanie wartości zwracanej byłoby bezcelowe. Przyczyną wywoływania Next() metody jest pobranie następnej losowej wartości.
Parametry metody i argumenty w instrukcji wywołującej
Podczas wywoływania metody można przekazać wartości, których metoda będzie używać do ukończenia zadania. Te wartości są nazywane argumentami. Metoda używa argumentów do przypisywania wartości do parametrów zdefiniowanych w podpisie metody. Metoda może wymagać co najmniej jednego parametru, aby wykonać zadanie lub w ogóle nie.
Uwaga / Notatka
Często terminy "parametr" i "argument" są używane zamiennie. Jednak "parametr" odnosi się do zmiennej używanej wewnątrz metody. Argument to wartość przekazywana po wywołaniu metody.
Większość metod została zaprojektowana tak, aby akceptowała co najmniej jeden parametr. Parametry mogą służyć do konfigurowania sposobu, w jaki metoda wykonuje swoją pracę, lub mogą być wykonywane bezpośrednio. Na przykład Random.Next() metoda używa parametrów, aby skonfigurować górne i dolne granice wartości zwracanej. Jednak parametr Console.WriteLine() jest używany bezpośrednio przez drukowanie wartości w konsoli programu .
Metody używają sygnatury metody, aby zdefiniować liczbę parametrów, które metoda zaakceptuje, a także typ danych każdego parametru. Instrukcja kodowania, która wywołuje metodę, musi spełniać wymagania określone przez sygnaturę metody. Niektóre metody udostępniają opcje liczby i typu parametrów akceptowanych przez metodę.
Gdy obiekt wywołujący wywołuje metodę, udostępnia konkretne wartości, nazywane argumentami, dla każdego parametru. Argumenty muszą być zgodne z typem parametru. Jednak nazwa argumentu, jeśli jest używana w kodzie wywołującym, nie musi być taka sama jak nazwa parametru zdefiniowana w metodzie.
Rozważ następujący kod:
Random dice = new Random();
int roll = dice.Next(1, 7);
Console.WriteLine(roll);
Pierwszy wiersz kodu tworzy wystąpienie Random klasy o nazwie dice. Drugi wiersz kodu używa dice.Next(1, 7) metody , aby przypisać losową wartość do liczby całkowitej o nazwie roll. Zwróć uwagę, że instrukcja wywołująca zawiera dwa argumenty oddzielone symbolem , . Metoda Next() zawiera sygnaturę metody, która akceptuje dwa parametry typu int. Te parametry służą do konfigurowania dolnej i górnej granicy dla zwracanej liczby losowej. Końcowy wiersz kodu używa Console.WriteLine() metody , aby wyświetlić wartość roll w konsoli.
Argumenty przekazane do metody muszą być tym samym typem danych co odpowiednie parametry zdefiniowane przez metodę. Jeśli spróbujesz przekazać niepoprawnie wpisany argument do metody, kompilator języka C# przechwyci błąd i wymusi zaktualizowanie instrukcji wywołującej, zanim kod zostanie skompilowany i uruchomiony. Sprawdzanie typów jest jednym ze sposobów używania języka C# i platformy .NET, aby uniemożliwić użytkownikom końcowym występowanie błędów w czasie wykonywania.
Uwaga / Notatka
Chociaż parametry są często używane, nie wszystkie metody wymagają parametrów do ukończenia zadania. Na przykład klasa zawiera metodęConsole, Console.Clear() która nie używa parametrów. Ponieważ ta metoda służy do czyszczenia wszelkich informacji wyświetlanych w konsoli, nie wymaga parametrów do ukończenia zadania.
Metody przeciążone
Wiele metod w bibliotece klas platformy .Net ma sygnatury metody przeciążonej. Między innymi umożliwia to wywołanie metody z argumentami określonymi w instrukcji wywołującej lub bez nich.
Metoda przeciążona jest definiowana przy użyciu wielu sygnatur metody. Metody przeciążone zapewniają różne sposoby wywoływania metody lub udostępniania różnych typów danych.
W niektórych przypadkach przeciążone wersje metody są używane do definiowania parametru przy użyciu różnych typów danych. Na przykład metoda Console.WriteLine() ma 19 różnych przeciążonych wersji. Większość tych przeciążeń umożliwia metodzie akceptowanie różnych typów, a następnie zapisywanie określonych informacji w konsoli. Rozważ następujący kod:
int number = 7;
string text = "seven";
Console.WriteLine(number);
Console.WriteLine();
Console.WriteLine(text);
W tym przykładzie wywołujesz trzy oddzielne przeciążone wersje metody WriteLine().
- Pierwsza
WriteLine()metoda używa sygnatury metody, która definiujeintparametr. - Druga
WriteLine()metoda używa sygnatury metody, która definiuje zero parametrów. - Trzecia
WriteLine()metoda używa sygnatury metody, która definiujestringparametr.
W innych przypadkach przeciążone wersje metody definiują inną liczbę parametrów. Alternatywne parametry mogą służyć do zapewnienia większej kontroli nad żądanym wynikiem. Na przykład metoda ma przeciążone wersje, Random.Next() które umożliwiają ustawianie różnych poziomów ograniczeń na losowo wygenerowanej liczbie.
Następujące ćwiczenie wywołuje metodę Random.Next() w celu wygenerowania losowych wartości całkowitych z różnymi poziomami ograniczeń:
Upewnij się, że masz pusty plik Program.cs otwarty w programie Visual Studio Code.
W razie potrzeby otwórz program Visual Studio Code, a następnie wykonaj następujące kroki, aby przygotować plik Program.cs w edytorze:
W menu Plik wybierz pozycję Otwórz folder.
Użyj okna dialogowego Otwórz folder, aby przejść do folderu CsharpProjects , a następnie go otworzyć.
W widoku Eksplorator programu Visual Studio Code wybierz pozycję Program.cs.
W menu Wybór programu Visual Studio Code wybierz pozycję Wybierz wszystko, a następnie naciśnij Delete.
Aby zbadać przeciążone wersje
Random.Next()metody, wprowadź następujący kod:Random dice = new Random(); int roll1 = dice.Next(); int roll2 = dice.Next(101); int roll3 = dice.Next(50, 101); Console.WriteLine($"First roll: {roll1}"); Console.WriteLine($"Second roll: {roll2}"); Console.WriteLine($"Third roll: {roll3}");W menu Plik programu Visual Studio Code kliknij przycisk Zapisz.
W widoku EKSPLORATOR, aby otworzyć terminal w lokalizacji folderu TestProject, kliknij prawym przyciskiem myszy pozycję TestProject, a następnie wybierz polecenie Otwórz w zintegrowanym terminalu.
Upewnij się, że ścieżka folderu wyświetlana w wierszu polecenia wskazuje folder zawierający plik Program.cs.
W wierszu polecenia terminalu, aby uruchomić kod, wpisz dotnet run , a następnie naciśnij Enter.
Zwróć uwagę, że wynik jest podobny do następujących danych wyjściowych:
First roll: 342585470 Second roll: 43 Third roll: 89Wygenerowane liczby są losowe, więc wyniki będą się różnić. Jednak w tym przykładzie pokazano zakres wyników, które mogą być widoczne.
Pośmiń minutę, aby zbadać kod.
Pierwsza wersja metody
Next()nie ustawia górnej ani dolnej granicy, dlatego metoda zwróci wartości z zakresu od0do2,147,483,647, który jest maksymalną wartością przechowywaną w elemencieint.Druga wersja
Next()metody określa wartość maksymalną jako górną granicę, więc w tym przypadku można oczekiwać losowej wartości między0i100.Trzecia wersja
Next()metody określa zarówno wartości minimalne, jak i maksymalne, więc w tym przypadku można oczekiwać losowej wartości między50i100.Zamknij panel Terminal.
W tej lekcji zbadano już kilka tematów. Oto szybka lista omówionych elementów:
- Zbadano sposób użycia wartości zwracanej metody (gdy metoda udostępnia wartość zwracaną).
- Zbadano, w jaki sposób metoda może używać parametrów zdefiniowanych jako określone typy danych.
- Zbadano przeciążone wersje niektórych metod, które obejmują różne parametry lub typy parametrów.
Korzystanie z funkcji IntelliSense
Program Visual Studio Code zawiera funkcje intelliSense obsługiwane przez usługę językową. Na przykład usługa językowa języka C# zapewnia inteligentne uzupełnianie kodu na podstawie semantyki języka i analizy kodu źródłowego. W tej sekcji użyjesz funkcji IntelliSense, aby ułatwić implementację Random.Next() metody.
Ponieważ funkcja IntelliSense jest uwidoczniona w edytorze kodu, możesz dowiedzieć się wiele o metodzie bez opuszczania środowiska kodowania. Funkcja IntelliSense udostępnia wskazówki i informacje referencyjne w oknie podręcznym w lokalizacji kursora podczas wprowadzania kodu. Podczas wpisywania kodu okno podręczne funkcji IntelliSense zmieni jego zawartość w zależności od kontekstu.
Na przykład po powolnym wprowadzeniu wyrazu dice funkcja IntelliSense będzie wyświetlać wszystkie słowa kluczowe języka C#, identyfikatory (a raczej nazwy zmiennych w kodzie) i klasy w bibliotece klas platformy .NET, które pasują do wprowadzonych liter. Funkcja autouzupełniania edytora kodu może służyć do zakończenia wpisywania wyrazu, który jest najlepszym dopasowaniem w oknie podręcznym funkcji IntelliSense. Wypróbuj to.
Upewnij się, że plik Program.cs jest otwarty w programie Visual Studio Code.
Aplikacja powinna zawierać następujący kod:
Random dice = new Random(); int roll1 = dice.Next(); int roll2 = dice.Next(101); int roll3 = dice.Next(50, 101); Console.WriteLine($"First roll: {roll1}"); Console.WriteLine($"Second roll: {roll2}"); Console.WriteLine($"Third roll: {roll3}");W dolnej części pliku kodu, aby eksperymentować z funkcją IntelliSense, powoli wprowadź litery
d,ia następniec.Zwróć uwagę na okno podręczne funkcji IntelliSense, które jest wyświetlane po rozpoczęciu wpisywania.
Gdy pojawi się funkcja IntelliSense, powinna zostać wyświetlona lista sugestii. Po wprowadzeniu
dicidentyfikatordicepowinien znajdować się u góry listy.Naciśnij Tab na klawiaturze.
Zwróć uwagę, że całe słowo
dicezostało ukończone w edytorze. Możesz użyć strzałek w górę i w dół, aby zmienić zaznaczenie przed naciśnięciem Tab.Uwaga / Notatka
Jeśli okno funkcji IntelliSense zniknie, można go wybrać za pomocą
backspacena klawiaturze, a następnie ponownie wprowadzić ostatni symbol, aby ponownie otworzyć funkcję IntelliSense.Aby określić operator dostępu do składowych, wprowadź
.znak.Zwróć uwagę, że okno podręczne Funkcji IntelliSense pojawia się ponownie po wprowadzeniu
.i jest wyświetlana niefiltrowana lista wszystkich metod (i innych elementów członkowskich klasy), które są dostępne.Wprowadź N
Lista zostanie przefiltrowana, a wyraz
Nextpowinien być najlepszym wyborem.Aby automatycznie wypełniać cały wyraz, naciśnij Tab.
Aby określić operator wywołania metody, wprowadź (
Zwróć uwagę, że nawias zamykający jest automatycznie dodawany.
Operator wywołania metody jest zestawem nawiasów znajdujących się po prawej stronie nazwy metody. Ta część instrukcji wywołującej określa argumenty, które zostaną przekazane do metody. Operator wywołania metody jest wymagany podczas wywoływania metody.
Zwróć uwagę, że w oknie podręcznym Funkcji IntelliSense są teraz wyświetlane szczegółowe informacje o metodzie
Random.Next().Poświęć minutę, aby sprawdzić wyskakujące okienko Funkcji IntelliSense dla
Random.Next()metody .Uwaga / Notatka
Jeśli okno podręczne funkcji IntelliSense zostało zamknięte przed sprawdzeniem, usuń operator
()wywołania , a następnie wprowadź ( w celu wyświetlenia wyskakującego okienka IntelliSense.Zwróć uwagę, że okno podręczne zawiera trzy sekcje, jedną po lewej stronie i dwie po prawej stronie.
Po prawej stronie powinna zostać wyświetlona
int Random.Next()górna sekcja iReturns a non-negative random integer.w dolnej sekcji. Elementintdefiniuje typ zwracany dla metody . Innymi słowy, gdy ta wersja metody jest wykonywana, zwróci wartość typuint.Po lewej stronie wyskakującego okienka IntelliSense zostanie wyświetlony komunikat
1/3.Wskazuje
1/3, że patrzysz na pierwszy z trzech podpisów metody dlaNext()metody. Zwróć uwagę, że ta wersja podpisu metody umożliwia metodzie pracę bez parametrów (bez argumentów przekazanych do metody w instrukcji wywołującej).Zwróć uwagę, że znajduje się również niewielka strzałka powyżej i poniżej
1/3.Aby sprawdzić drugą przeciążoną wersję metody, naciśnij Strzałka w dół na klawiaturze.
Zwróć uwagę, że możesz użyć strzałek w górę i w dół, aby nawigować między różnymi przeciążonym wersjami. Gdy to zrobisz, zobaczysz
1/3element ,2/3i3/3pojawi się po lewej stronie wyskakującego okienka IntelliSense oraz przydatne wyjaśnienia po prawej stronie.Pośmiń minutę na sprawdzenie każdej z przeciążonych wersji metody
Random.Next().Druga przeciążona wersja metody
2/3, informuje, żeNext()metoda może zaakceptować parametrint maxValue. Opis informuje, żemaxValuejest to wyłączna górna granica liczby, która ma zostać wygenerowana przez metodęNext(). Wartość wyłączna wskazuje, że liczba zwracana będzie mniejsza niż wartość maxValue. Dlatego po określeniudice.Next(1,7);maksymalnej rzutki kostką będzie 6. Zwróć uwagę, że komunikat w dolnej części sekcji został zaktualizowany do:Returns a non-negative random integer that is less than the specified maximum.Trzecia wersja metody
3/3, informuje, żeNext()metoda może akceptować zarównoint minValueparametry, jak iint maxValuejako parametry. Nowy parametr ,minValueto dolna granica liczby, która ma zostać wygenerowana przez metodęNext(). Ponieważ dolna granica jest inkluzywna, a nie wykluczająca, wartość zwracana może być równaminValue. Komunikat w dolnej części zawiera teraz następujące informacje:Returns a random integer that is within a specified range.W takim przypadku funkcja IntelliSense udostępnia wszystkie informacje potrzebne do wybrania odpowiedniego przeciążenia, w tym szczegółowe wyjaśnienie i
maxValueminValue. Mogą jednak wystąpić sytuacje, w których należy zapoznać się z dokumentacją metody.
Użyj learn.microsoft.com, aby uzyskać informacje o przeciążonych metodach
Drugim sposobem zapoznania się z przeciążonymi wersjami metod jest zapoznanie się z dokumentacją metody. Dokumentacja pomoże ci również zrozumieć dokładnie, do czego służy każdy parametr.
Aby rozpocząć, otwórz preferowaną przeglądarkę internetową i wyszukiwarkę.
Wyszukiwanie losowych C#.Next()
Wyszukiwanie powinno zawierać nazwę klasy i nazwę metody. Możesz również uwzględnić termin
C#, aby nie przypadkowo uzyskać wyników dla innych języków programowania.Wybierz górny wynik wyszukiwania z adresem URL rozpoczynającym się od
https://learn.microsoft.com.Jeden z pierwszych wyników wyszukiwania powinien prowadzić do adresu URL rozpoczynającego się od
https://learn.microsoft.com. W takim przypadku tytuł linku powinien być wyświetlany jakoRandom.Next Method.Oto link, jeśli masz problem ze znalezieniem go przy użyciu wyszukiwarki:
Otwórz link dla języka C# Random.Next().
Szybko przeskanuj dokumentację.
Przewiń w dół zawartość strony, aby wyświetlić różne przykłady kodu. Zwróć uwagę, że przykłady można uruchomić w oknie przeglądarki.
Dokumentacja learn.microsoft.com jest zgodna ze standardowym formatem dla każdej klasy i metody w bibliotece klas platformy .NET.
W górnej części strony internetowej znajdź sekcję z etykietą Przeciążenia.
Zwróć uwagę, że istnieją trzy przeciążone wersje metody wymienionej na liście. Każda przeciążona wersja na liście zawiera hiperłącze do lokalizacji w dalszej części strony.
Aby przejść "na stronie" do opisu drugiej przeciążonej wersji, wybierz pozycję Dalej(Int32).
Dokumentacja dla każdej wersji metody obejmuje:
- Krótki opis funkcji metody
- Definicja metody
- Parametry akceptowane przez metodę
- Wartości zwracane
- Wyjątki, które można zgłaszać
- Przykłady używanej metody
- Inne uwagi dotyczące metody
Pośmiń chwilę, aby przejrzeć sekcję Parametry .
W sekcji Parametry można przeczytać, że
maxValueparametr jest "wyłączną górną granicą liczby losowej do wygenerowania". Wyłączna górna granica oznacza, że jeśli chcesz, aby liczby nie większe niż10, należy przekazać wartość11.Możesz również przeczytać w następnym wierszu: "
maxValuemusi być większe lub równe 0". Co się stanie, jeśli zignorujesz tę instrukcję? W sekcji Wyjątki można zobaczyćUwaga / Notatka
Zawartość w learn.microsoft.com jest "źródłem prawdy" dla biblioteki klas platformy .NET. Ważne jest, aby zapoznać się z dokumentacją, aby zrozumieć, jak działa dana metoda.
Podsumowanie
- Metody mogą nie akceptować parametrów ani wielu parametrów, w zależności od sposobu ich projektowania i implementacji. Podczas przekazywania wielu parametrów rozdziel je symbolem
,. - Metody mogą zwracać wartość po zakończeniu zadania lub mogą zwracać nic (void).
- Metody przeciążone obsługują kilka implementacji metody, z których każda ma unikatowy podpis metody (liczbę parametrów i typ danych każdego parametru).
- Funkcja IntelliSense ułatwia szybsze pisanie kodu. Zapewnia on szybkie odwołanie do metod, ich wartości zwracanych, ich przeciążonych wersji i typów ich parametrów.
- learn.microsoft.com to "źródło prawdy", gdy chcesz dowiedzieć się, jak działają metody w bibliotece klas platformy .NET.