Ćwiczenie — metody z opcjonalnymi parametrami
Język C Sharp umożliwia używanie nazwanych i opcjonalnych parametrów. Te typy parametrów umożliwiają wybranie argumentów, które mają być dostarczane do metody, więc nie masz ograniczeń do struktury zdefiniowanej w podpisie metody.
Nazwane argumenty umożliwiają określenie wartości parametru przy użyciu jego nazwy, a nie pozycji. Parametry opcjonalne umożliwiają pominięcie tych argumentów podczas wywoływania metody.
W tym ćwiczeniu dowiesz się, jak używać parametrów nazwanych i opcjonalnych.
Tworzenie aplikacji RSVP
W tym zadaniu utworzysz krótką aplikację dla gości, którzy chcą potwierdzić uczestnictwo w wydarzeniu. Goście poinformują o liczbie osób w swojej grupie oraz o wszelkich alergiach. Dodasz również opcję ograniczania potwierdzeń RSVP do listy gości z zaproszeniami.
W edytorze programu Visual Studio Code usuń dowolny istniejący kod z poprzednich ćwiczeń.
Wpisz następujący kod w edytorze programu 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]); } }W tym kodzie utworzysz zmienne do przechowywania listy gości i potwierdzeń uczestnictwa. Metoda
RSVPdołącza informacje gościa do listy, aShowRSVPsmetoda wyświetla sumę RSVP przy użyciu sekwencji ucieczki tabulatora w celu oddzielenia informacji gościa.Wprowadź następujący kod w metodzie ,
RSVPaby wyszukać listę gości: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; } }W tym kodzie sprawdzasz, czy dana nazwa jest równa dowolnej nazwie na liście gości. W przypadku znalezienia dopasowania należy ustawić wartość
foundtrue i przerwać pętlęforeach. Jeślifoundma wartość false, zostanie wyświetlony komunikat i użyj słowa kluczowegoreturn, aby zakończyć metodę.Wywołaj metodę, dodając następujący kod powyżej
RSVPpodpisu metody: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();Zapisz i uruchom kod, aby obserwować następujące dane wyjściowe:
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
Użyj nazwanych argumentów
Wywołanie metody akceptującej wiele parametrów może być trudne, aby zrozumieć, co reprezentują argumenty. Użycie nazwanych argumentów może zwiększyć czytelność kodu. Użyj nazwanego argumentu, określając nazwę parametru, po którym następuje wartość argumentu. W tym zadaniu będziesz przećwiczać używanie nazwanych argumentów.
Znajdź następujący wiersz kodu:
RSVP("Linh", 2, "none", false);Zaktualizuj wywołanie metody w następujący sposób:
RSVP(name: "Linh", partySize: 2, allergies: "none", inviteOnly: false);Zwróć uwagę, że podajesz nazwę parametru, po którym następuje dwukropek i wartość. Ta składnia definiuje nazwany argument. Nie trzeba nazywać wszystkich argumentów. Na przykład następująca składnia jest również prawidłowa:
RSVP("Linh", 2, allergies: "none", inviteOnly: false);RSVP("Linh", partySize: 2, "none", false);Argumenty nazwane, gdy są używane z argumentami pozycyjnymi, są prawidłowe, jeśli są używane w prawidłowej pozycji. Nazwane argumenty są również prawidłowe, o ile nie następują po nich żadne argumenty pozycyjne. Na przykład dołączenie
"Linh"i2na końcu będzie nieprawidłowe:RSVP(allergies: "none", inviteOnly: false, "Linh", 2);W przypadku wprowadzenia tego kodu zostanie wyświetlony następujący błąd:
Named argument 'allergies' is used out-of-position but is followed by an unnamed argumentZnajdź następujący wiersz kodu:
RSVP("Tony", 1, "Jackfruit", true);Zaktualizuj wywołanie metody w następujący sposób:
RSVP("Tony", inviteOnly: true, allergies: "Jackfruit", partySize: 1);Zwróć uwagę, że nazwane argumenty nie muszą być wyświetlane w oryginalnej kolejności. Argument nienazwany
Tonyjest jednak argumentem pozycyjnym i musi pojawić się w pasującej pozycji.Zapisz i uruchom kod, aby obserwować następujące dane wyjściowe:
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 fruitZwróć uwagę, że użycie nazwanych argumentów nie zmienia danych wyjściowych.
Deklarowanie parametrów opcjonalnych
Parametr staje się opcjonalny po przypisaniu wartości domyślnej. Jeśli opcjonalny parametr zostanie pominięty z argumentów, wartość domyślna jest używana podczas wykonywania metody. W tym kroku ustawisz parametry partySizei allergiesinviteOnly opcjonalne.
Aby zdefiniować parametry opcjonalne, zaktualizuj sygnaturę
RSVPmetody w następujący sposób:void RSVP(string name, int partySize = 1, string allergies = "none", bool inviteOnly = true)Pośmiń chwilę na obserwowanie składni. Parametry są nadal rozdzielane przecinkami, ale parametry
partySize,allergiesiinviteOnlysą przypisane do wartości.Następnie zaktualizujesz wywołania do
RSVP, aby zastosować parametry opcjonalne.Zaktualizuj swój kod do następującej wersji.
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);W każdym wywołaniu metody zwróć uwagę, że nazwa nigdy nie zostanie pominięta. Po wywołaniu metody wszystkie wymagane argumenty muszą być zawsze uwzględniane. Można jednak pominąć wszelkie opcjonalne argumenty.
W tym kodzie usunięto argumenty
1, "none", truez RSVP Rebeki. Ponieważ te argumenty są zgodne z wartością domyślną, wynik rsvp Rebecca jest taki sam.Usunięto argument
inviteOnlyz odpowiedzi Nadia na zaproszenie. Ponieważ wartośćinviteOnlydomyślna totrue, wynik rsvp Nadia jest taki sam.Usunięto
partySizeargument z odpowiedzi na zaproszenie Tony'ego. Gdyby Tony miał zaproszenie, domyślna wartośćpartySizebędzie używana w RSVP.Usunięto
allergiesargument zarówno z odpowiedzi na zaproszenia Linh, jak i Noor. Ich rsvps wyświetli domyślną wartośćnonedla "Alergie".Zapisz i uruchom kod, aby obserwować następujące dane wyjściowe:
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 fruitZwróć uwagę, że wartości domyślne są używane zamiast pominiętych argumentów, takich jak
partySizeiallergies.
Podsumowanie
Oto, czego nauczyłeś się do tej pory na temat opcjonalnych i nazwanych argumentów:
- Parametry są opcjonalne przez ustawienie wartości domyślnej w podpisie metody.
- Nazwane argumenty są określane z nazwą parametru, a następnie dwukropkiem i wartością argumentu.
- Podczas łączenia argumentów nazwanych i pozycyjnych należy użyć poprawnej kolejności parametrów.