Упражнение. Методы с необязательными параметрами
Язык C Sharp позволяет использовать именованные и необязательные параметры. Эти типы параметров позволяют выбрать аргументы, которые нужно предоставить методу, поэтому не ограничивается структурой, определенной в сигнатуре метода.
Именованные аргументы позволяют указать значение параметра, используя его имя, а не позицию. Необязательные параметры позволяют опустить эти аргументы при вызове метода.
В этом упражнении вы узнаете, как использовать как именованные, так и необязательные параметры.
Создание приложения RSVP
В этой задаче вы создадите простое приложение, чтобы гости могли подтвердить свое участие в мероприятии. Гости укажут количество участников и любые аллергии. Вы также добавите параметр ограничения RSVP в список гостей, доступный только для приглашения.
В редакторе Visual Studio Code удалите существующий код из предыдущих упражнений.
Введите следующий код в редактор Visual Studio Code:
string[] guestList = {"Rebecca", "Nadia", "Noor", "Jonte"}; string[] rsvps = new string[10]; int count = 0; void RSVP(string name, int partySize, string allergies, bool inviteOnly) { if (inviteOnly) { // search guestList before adding rsvp } rsvps[count] = $"Name: {name}, \tParty Size: {partySize}, \tAllergies: {allergies}"; count++; } void ShowRSVPs() { Console.WriteLine("\nTotal RSVPs:"); for (int i = 0; i < count; i++) { Console.WriteLine(rsvps[i]); } }В этом коде создаются переменные для хранения гостевого списка и rsvps. Метод
RSVPдобавляет информацию о гостях в список, а методShowRSVPsотображает общее количество приглашенных, используя символ табуляции для разделения информации о гостях.Введите следующий код в методе
RSVPдля поиска гостевого списка:if (inviteOnly) { bool found = false; foreach (string guest in guestList) { if (guest.Equals(name)) { found = true; break; } } if (!found) { Console.WriteLine($"Sorry, {name} is not on the guest list"); return; } }В этом коде проверяется, равно ли заданное имя любому из имен в гостевом списке. Если совпадение найдено, установите
foundв значение true и выйдите изforeachцикла. Еслиfoundзначение равно false, отображается сообщение и используетсяreturnключевое слово для завершения метода.Вызовите метод, добавив следующий код над сигнатурой
RSVPметода:RSVP("Rebecca", 1, "none", true); RSVP("Nadia", 2, "Nuts", true); RSVP("Linh", 2, "none", false); RSVP("Tony", 1, "Jackfruit", true); RSVP("Noor", 4, "none", false); RSVP("Jonte", 2, "Stone fruit", false); ShowRSVPs();Сохраните и запустите код, чтобы просмотреть следующие выходные данные:
Sorry, Tony is not on the guest list Total RSVPs: Name: Rebecca, Party Size: 1, Allergies: none Name: Nadia, Party Size: 2, Allergies: Nuts Name: Linh, Party Size: 2, Allergies: none Name: Noor, Party Size: 4, Allergies: none Name: Jonte, Party Size: 2, Allergies: Stone fruit
Использование именованных аргументов
При вызове метода, принимающего множество параметров, может быть сложно понять, что представляют собой аргументы. Использование именованных аргументов может улучшить удобочитаемость кода. Используйте именованный аргумент, указав имя параметра, за которым следует значение аргумента. В этой задаче вы будете использовать именованные аргументы.
Найдите следующую строку кода:
RSVP("Linh", 2, "none", false);Обновите вызов метода следующим образом:
RSVP(name: "Linh", partySize: 2, allergies: "none", inviteOnly: false);Обратите внимание, что вы указываете имя параметра, за которым следует двоеточие и значение. Этот синтаксис определяет именованный аргумент. Не обязательно называть все аргументы. Например, следующий синтаксис также является допустимым:
RSVP("Linh", 2, allergies: "none", inviteOnly: false);RSVP("Linh", partySize: 2, "none", false);Именованные аргументы, используемые с позициальными аргументами, допустимы, если они используются в правильной позиции. Именованные аргументы также допустимы, если за ними не следует никаких позиционных аргументов. Например, использование
"Linh"и2в конце было бы недопустимо:RSVP(allergies: "none", inviteOnly: false, "Linh", 2);Если вы ввели этот код, вы получите следующую ошибку:
Named argument 'allergies' is used out-of-position but is followed by an unnamed argumentНайдите следующую строку кода:
RSVP("Tony", 1, "Jackfruit", true);Обновите вызов метода следующим образом:
RSVP("Tony", inviteOnly: true, allergies: "Jackfruit", partySize: 1);Обратите внимание, что именованные аргументы не должны отображаться в исходном порядке. Однако неименованный аргумент является позициальным аргументом
Tonyи должен отображаться в соответствующей позиции.Сохраните и запустите код, чтобы просмотреть следующие выходные данные:
Sorry, Tony is not on the guest list Total RSVPs: Name: Rebecca, Party Size: 1, Allergies: none Name: Nadia, Party Size: 2, Allergies: Nuts Name: Linh, Party Size: 2, Allergies: none Name: Noor, Party Size: 4, Allergies: none Name: Jonte, Party Size: 2, Allergies: Stone fruitОбратите внимание, что использование именованных аргументов не изменяет выходные данные.
Объявление необязательных параметров
Параметр становится необязательным при назначении значения по умолчанию. Если необязательный параметр опущен из аргументов, значение по умолчанию используется при выполнении метода. На этом шаге вы создадите параметры partySizeallergies и inviteOnly необязательные.
Чтобы определить необязательные параметры, обновите сигнатуру
RSVPметода следующим образом:void RSVP(string name, int partySize = 1, string allergies = "none", bool inviteOnly = true)Обратите внимание на синтаксис. Параметры по-прежнему разделены запятыми, но параметры
partySizeallergies, иinviteOnlyкаждый присваивается значению.Далее, вы обновите вызовы функции
RSVP, чтобы применить необязательные параметры.Обновите код следующим образом:
RSVP("Rebecca"); RSVP("Nadia", 2, "Nuts"); RSVP(name: "Linh", partySize: 2, inviteOnly: false); RSVP("Tony", allergies: "Jackfruit", inviteOnly: true); RSVP("Noor", 4, inviteOnly: false); RSVP("Jonte", 2, "Stone fruit", false);В каждом вызове метода обратите внимание, что имя никогда не опускается. При вызове метода все обязательные аргументы всегда должны быть включены. Однако любые необязательные аргументы могут быть опущены.
В этом коде вы удалили аргументы
1, "none", trueиз rsvp Ребекки. Так как эти аргументы соответствуют значению по умолчанию, результат rsvp Ребекки совпадает.Вы удалили
inviteOnlyаргумент из rsvp Нади. Так как значениеinviteOnlyпо умолчанию равноtrue, результат rsvp Nadia совпадает.Вы удалили
partySizeаргумент из rsvp Тони. Если у Тони было приглашение, значениеpartySizeпо умолчанию будет использоваться в RSVP.Вы удалили
allergiesаргумент из rsvps Linh и Noor. Их rsvps будет отображать значениеnoneпо умолчанию для "Аллергия".Сохраните и запустите код, чтобы просмотреть следующие выходные данные:
Sorry, Tony is not on the guest list Total RSVPs: Name: Rebecca, Party Size: 1, Allergies: none Name: Nadia, Party Size: 2, Allergies: Nuts Name: Linh, Party Size: 2, Allergies: none Name: Noor, Party Size: 4, Allergies: none Name: Jonte, Party Size: 2, Allergies: Stone fruitОбратите внимание, что значения по умолчанию используются вместо опущенных аргументов, таких как
partySizeиallergies.
Обзор
Вот что вы узнали о необязательных и именованных аргументах до сих пор:
- Параметры делаются необязательными, задав значение по умолчанию в сигнатуре метода.
- Именованные аргументы указываются с именем параметра, а затем двоеточием и значением аргумента.
- При объединении именованных и позиционных аргументов необходимо использовать правильный порядок параметров.