Упражнение. Возвращаемые значения и параметры методов
- 18 минут
В предыдущем уроке вы использовали сценарий программирования roll dice, чтобы проиллюстрировать разницу между методами с отслеживанием состояния (экземпляром) и без отслеживания состояния (статическими). Этот же сценарий поможет вам понять другие важные понятия о вызовах методов. Рассмотрим пример.
- обработка возвращаемого значения метода.
- параметры метода и передача аргументов в метод.
- выбор перегруженной версии метода.
Возвращаемые значения
Некоторые методы выполняют свою задачу в "молчаливом" режиме. Другими словами, они не возвращают значение, когда они завершаются. Такие методы называются методами void.
Другие методы предназначены для возврата значения после завершения. Возвращаемое значение обычно является результатом операции. Возвращаемое значение является основным способом взаимодействия метода с кодом, который вызывает метод.
Вы видели, что Random.Next() метод возвращает int тип, содержащий значение случайно созданного числа. Однако метод может быть разработан для возврата любого типа данных, даже другого класса. Например, String класс имеет некоторые методы, возвращающие строку, некоторые, возвращающие целое число, и некоторые, возвращающие логическое значение.
При вызове метода, возвращающего значение, часто присваивается возвращаемое значение переменной. Таким образом, вы можете использовать это значение позже в коде. В сценарии dice вы назначили возвращаемое значение Random.Next() переменной roll :
int roll = dice.Next(1, 7);
В некоторых случаях может потребоваться использовать возвращаемое значение напрямую, не назначая его переменной. Например, вы можете распечатать возвращаемое значение в консоли следующим образом:
Console.WriteLine(dice.Next(1, 7));
Несмотря на то, что метод возвращает значение, можно вызвать метод без использования возвращаемого значения. Например, можно игнорировать возвращаемое значение, вызвав метод следующим образом:
dice.Next(1, 7);
Тем не менее, игнорируя возвращаемое значение, будет бессмысленным.
Next() Причина вызова метода заключается в том, что вы можете получить следующее случайное значение.
Параметры метода и аргументы в операторе вызова
При вызове метода можно передать значения, которые метод будет использовать для выполнения задачи. Эти значения называются аргументами. Метод использует аргументы для назначения значений параметрам , определенным в сигнатуре метода. Для выполнения задачи может потребоваться один или несколько параметров.
Замечание
Часто термины "параметр" и "аргумент" используются взаимозаменяемо. Однако параметр относится к переменной, которая используется внутри метода. Аргумент — это значение, передаваемое при вызове метода.
Большинство методов предназначены для принятия одного или нескольких параметров. Параметры можно использовать для настройки того, как метод выполняет свою работу, или они могут работать напрямую. Например, Random.Next() метод использует параметры для настройки верхних и нижних границ возвращаемого значения. Однако параметр Console.WriteLine() используется непосредственно путем печати значения в консоль.
Методы используют сигнатуру метода для определения количества параметров, которые будет принимать метод, а также тип данных каждого параметра. Инструкция кодирования, вызывающая метод, должна соответствовать требованиям, заданным сигнатурой метода. Некоторые методы предоставляют параметры для числа и типа параметров, которые принимает метод.
Когда вызывающий код вызывает метод, он предоставляет конкретные значения, называемые аргументами, для каждого параметра. Аргументы должны быть совместимы с типом параметра. Однако имя аргумента, если он используется в вызывающем коде, не должен совпадать с именем параметра, определенным в методе.
Рассмотрим следующий код:
Random dice = new Random();
int roll = dice.Next(1, 7);
Console.WriteLine(roll);
Первая строка кода создает экземпляр Random класса с именем dice. Вторая строка кода использует dice.Next(1, 7) метод для назначения случайного значения целым числом с именем roll. Обратите внимание, что оператор вызова предоставляет два аргумента, разделенные символом , . Этот Next() метод включает сигнатуру метода, которая принимает два параметра типа int. Эти параметры используются для настройки нижних и верхних границ для возвращаемого случайного числа. Последняя строка кода использует Console.WriteLine() метод для печати значения roll в консоли.
Аргументы, передаваемые методу, должны быть тем же типом данных, что и соответствующие параметры, определенные методом. Если вы пытаетесь передать неправильный типизированный аргумент методу, компилятор C# перехватит ошибку и принудительно обновит оператор вызова до компиляции и выполнения кода. Проверка типов — это один из способов использования C# и .NET для предотвращения возникновения ошибок конечных пользователей во время выполнения.
Замечание
Хотя часто используются параметры, не все методы требуют выполнения задачи. Например, Console класс включает Console.Clear() метод, который не использует параметры. Так как этот метод используется для очистки любой информации, отображаемой в консоли, не требуется параметров для выполнения задачи.
Перегруженные методы
Многие методы из библиотеки классов .NET имеют перегруженные сигнатуры. Помимо прочего, это позволяет вызывать метод с аргументами или без аргументов, указанных в операторе вызова.
Перегруженный метод определяется с использованием нескольких сигнатур. С помощью перегрузок вы можете вызывать метод разными способами, передавая в него данные разных типов.
В некоторых случаях перегруженные версии метода используются для определения параметра с помощью различных типов данных. Например, у метода Console.WriteLine() есть 19 разных перегруженных версий. Большинство этих перегрузок позволяют методу принимать различные типы, а затем записывать указанные сведения в консоль. Рассмотрим следующий код:
int number = 7;
string text = "seven";
Console.WriteLine(number);
Console.WriteLine();
Console.WriteLine(text);
В этом примере вызываются три разные перегруженные версии метода WriteLine().
- Первый
WriteLine()метод использует сигнатуру метода, которая определяетintпараметр. - Второй
WriteLine()метод использует сигнатуру метода, которая определяет нулевые параметры. -
WriteLine()Третий метод использует сигнатуру метода, которая определяетstringпараметр.
В других случаях перегруженные версии метода определяют другое количество параметров. Альтернативные параметры можно использовать для обеспечения большего контроля над требуемым результатом. Например, метод Random.Next() перегружает версии, позволяющие задать различные уровни ограничения на случайно созданное число.
В следующем упражнении метод вызывается Random.Next() для создания случайных целочисленных значений с разными уровнями ограничения:
Убедитесь, что в Visual Studio Code открыт пустой файл Program.cs.
При необходимости откройте Visual Studio Code и выполните следующие действия, чтобы подготовить файл Program.cs в редакторе:
В меню Файл выберите Открыть папку.
Используйте диалоговое окно "Открыть папку", чтобы перейти к ней, а затем открыть папку CsharpProjects .
В представлении обозревателя Visual Studio Code выберите Program.cs.
В меню Selection в Visual Studio Code выберите Выбрать все, затем нажмите клавишу Delete.
Чтобы проверить перегруженные
Random.Next()версии метода, введите следующий код: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}");В меню Visual Studio Code "Файл" нажмите на "Сохранить".
В представлении EXPLORER откройте терминал в папке TestProject, щелкните правой кнопкой мыши TestProject и выберите "Открыть в интегрированном терминале".
Убедитесь, что путь к папке, отображаемой в командной строке, указывает на папку, содержащую файл Program.cs.
В командной строке терминала, чтобы запустить код, введите команду dotnet run и нажмите клавишу Enter.
Обратите внимание, что результат аналогичен следующим выходным данным:
First roll: 342585470 Second roll: 43 Third roll: 89Числа, созданные случайными, поэтому результаты будут отличаться. Однако в этом примере показан диапазон результатов, которые можно увидеть.
Минуту, чтобы проверить код.
В первой версии метода
Next()не устанавливаются верхняя и нижняя границы, в результате чего он будет возвращать значения в диапазоне от0до2,147,483,647(максимально допустимое значение типаint).Вторая версия
Next()метода задает максимальное значение в качестве верхней границы, поэтому в этом случае можно ожидать случайное значение между0и100.Третья версия
Next()метода указывает как минимальное, так и максимальное значение, поэтому в данном случае можно ожидать случайное значение между50и100.Закройте панель терминала.
Вы уже изучили несколько разделов в этом уроке. Ниже приведен краткий список описанных ниже действий.
- Вы изучили, как использовать возвращаемое значение метода (когда метод предоставляет возвращаемое значение).
- Вы изучили, как метод может использовать параметры, определенные как определенные типы данных.
- Вы изучили перегруженные версии некоторых методов, которые включают различные параметры или типы параметров.
Использование IntelliSense
Visual Studio Code включает функции IntelliSense , предоставляемые языковой службой. Например, служба языка C# предоставляет интеллектуальные завершения кода на основе семантики языка и анализа исходного кода. В этом разделе описано, как использовать IntelliSense для реализации Random.Next() метода.
Так как IntelliSense предоставляется в редакторе кода, вы можете узнать больше о методе, не покидая среду кодирования. IntelliSense предоставляет подсказки и справочные сведения в всплывающем окне под расположением курсора при вводе кода. При вводе кода всплывающее окно IntelliSense изменит его содержимое в зависимости от контекста.
Например, при медленном вводе слова dice IntelliSense будет отображать все ключевые слова C#, идентификаторы (или, скорее, имена переменных в коде) и классы в библиотеке классов .NET, которые соответствуют введенным буквам. Функции автозаполнения редактора кода можно использовать для завершения ввода слова, которое является лучшим совпадением во всплывающем заполнения IntelliSense. Попробуйте.
Убедитесь, что файл Program.cs открыт в Visual Studio Code.
Приложение должно содержать следующий код:
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}");В нижней части файла кода, чтобы поэкспериментировать с IntelliSense, медленно введите буквы
d,iа затемc.Обратите внимание на всплывающее окно IntelliSense, которое отображается при начале ввода.
При появлении IntelliSense появится список предложений. К моменту ввода
dicидентификаторdiceдолжен находиться в верхней части списка.Нажмите клавишу TAB на клавиатуре.
Обратите внимание, что все слово
diceзавершено в редакторе. Вы можете использовать клавиши со стрелками вверх и вниз, чтобы изменить выделение перед нажатием клавиши TAB.Замечание
Если окно IntelliSense исчезнет, его можно выбрать с помощью
backspaceклавиши на клавиатуре, а затем повторно ввести последний символ, чтобы повторно открыть IntelliSense.Чтобы указать оператор доступа к члену, введите
.символ.Обратите внимание, что всплывающее окно IntelliSense появится при вводе
.и отображает нефильтрованный список всех методов (и других членов класса), доступных.Ввод N
Список будет отфильтрован, и слово
Nextдолжно быть верхним выбором.Чтобы автозавершение всего слова, нажмите клавишу TAB.
Чтобы указать оператор вызова метода, введите (
Обратите внимание, что закрывающая скобка автоматически добавляется для вас.
Оператор вызова метода — это набор круглых скобок, расположенных справа от имени метода. Эта часть инструкции вызова заключается в том, где указываются аргументы, которые будут переданы методу. При вызове метода требуется оператор вызова метода.
Обратите внимание, что всплывающее окно IntelliSense теперь отображает подробные сведения о методе
Random.Next().Минуту, чтобы проверить всплывающее окно IntelliSense для
Random.Next()метода.Замечание
Если всплывающее окно IntelliSense закрыто, прежде чем у вас есть возможность проверить его, удалите оператор
()вызова, а затем введите ( , чтобы отобразить всплывающее окно IntelliSense.Обратите внимание, что всплывающее окно содержит три раздела, один слева и два справа.
Справа вы увидите
int Random.Next()в верхнем разделе иReturns a non-negative random integer.в нижнем разделе. Определяетintтип возвращаемого значения для метода. Другими словами, при выполнении этой версии метода он вернет значение типаint.В левой части всплывающего окна IntelliSense отображается
1/3.Указывает
1/3, что вы просматриваете первые три сигнатуры метода дляNext()метода. Обратите внимание, что эта версия сигнатуры метода позволяет методу работать без параметров (никаких аргументов, переданных методу в операторе вызова).Обратите внимание, что есть также крошечная стрелка выше и ниже
1/3.Чтобы проверить вторую перегруженную версию метода, нажмите клавишу СТРЕЛКА ВНИЗ на клавиатуре.
Обратите внимание, что для перехода между различными перегруженными версиями можно использовать клавиши со стрелками вверх и вниз. Когда вы делаете, вы увидите
1/3и2/33/3появится в левой части всплывающего окна IntelliSense и полезные объяснения справа.Минуту, чтобы проверить каждую из перегруженных
Random.Next()версий метода.Вторая перегруженная версия метода
2/3сообщает, чтоNext()метод может принять параметрint maxValue. В описании показано, чтоmaxValueэто монопольная верхняя граница для числа, которое нужноNext()создать методом. Исключающее указывает, что возвращаемое число будет меньше maxValue. Поэтому при указанииdice.Next(1,7);максимального ролла dice будет 6. Обратите внимание, что сообщение в нижней части раздела обновлено следующим образом:Returns a non-negative random integer that is less than the specified maximum.Третья версия метода сообщает, что
3/3метод может принимать какNext()параметры,int minValueтак иint maxValueкак параметры. Новый параметрminValue, является нижней границой для числа, которое требуетсяNext()создать метод. Поскольку нижняя граница является инклюзивной, а не эксклюзивной, возвращаемое значение может быть равноminValue. В нижней части сообщения теперь указано следующее:Returns a random integer that is within a specified range.В этом случае IntelliSense предоставляет все сведения, необходимые для выбора соответствующей перегрузки, включая подробное описание
maxValueиminValue. Однако могут возникнуть ситуации, когда необходимо обратиться к документации метода.
Использование learn.microsoft.com для получения сведений о перегруженных методах
Получить сведения о перегруженных версиях метода можно в документации по нему. В документации также помогут понять, для чего предназначен каждый параметр.
Чтобы начать, откройте предпочитаемый веб-браузер и поисковую систему.
Выполните поиск по C# Random.Next()
Поиск должен содержать имя класса и имя метода. Вы также можете включить термин
C#, чтобы не случайно получить результаты для других языков программирования.Выберите верхний результат поиска с URL-адресом, начинающимся
https://learn.microsoft.com.Среди первых результатов поиска должен появиться URL-адрес, начинающийся с
https://learn.microsoft.com. В этом случае название ссылки должно отображаться какRandom.Next Method.Используйте эту ссылку, если вам не удалось найти нужную информацию в поисковой системе:
Откройте ссылку для C# Random.Next().
Быстрая проверка документации.
Прокрутите вниз содержимое страницы, чтобы просмотреть различные примеры кода. Обратите внимание, что вы можете запустить примеры в окне браузера.
Документация по learn.microsoft.com соответствует стандартному формату для каждого класса и метода в библиотеке классов .NET.
В верхней части веб-страницы найдите раздел с помеченными перегрузками.
Обратите внимание, что есть три перегруженные версии метода. Каждая перегруженная версия, указанная в списке, включает гиперссылку на расположение вниз на странице.
Чтобы перейти на страницу с описанием второй перегруженной версии, нажмите кнопку Next(Int32).
Документация по каждому варианту метода включает:
- краткое описание функционального назначения метода;
- определение метода;
- Параметры, которые принимает метод
- Возвращаемые значения
- исключения, которые могут возникать при работе с методом;
- примеры использования метода;
- Другие замечания о методе
Чтобы просмотреть раздел "Параметры" , сделайте минуту.
В разделе "Параметры" можно прочитать, что
maxValueпараметр является "монопольной верхней границой случайного числа, которое необходимо создать". Монопольная верхняя граница означает, что если требуется число не больше10, необходимо передать значение11.Вы также можете прочитать в следующей строке: "
maxValueдолжно быть больше или равно 0". Что произойдет, если игнорировать эту инструкцию? В разделе "Исключения" вы увидите, что метод возвращаетArgumentOutOfRangeExceptionmaxValueзначение меньше 0.Замечание
Содержимое learn.microsoft.com является источником истины для библиотеки классов .NET. Чтобы понять принципы и результаты работы интересующего вас метода, важно ознакомиться с документацией по нему.
Обзор
- Методы могут принимать никакие параметры или несколько параметров в зависимости от того, как они были разработаны и реализованы. При передаче нескольких параметров разделите их символом
,. - Методы могут возвращать значение, когда они завершают задачу, или они могут возвращать ничего (void).
- Перегруженные методы поддерживают несколько реализаций метода, каждый из которых имеет уникальную сигнатуру метода (количество параметров и тип данных каждого параметра).
- IntelliSense помогает быстрее писать код. Он предоставляет быструю ссылку на методы, их возвращаемые значения, их перегруженные версии и типы их параметров.
- learn.microsoft.com — это "источник истины", когда вы хотите узнать, как работают методы библиотеки классов .NET.