Ćwiczenie — metody z opcjonalnymi parametrami

Zakończone

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.

  1. W edytorze programu Visual Studio Code usuń dowolny istniejący kod z poprzednich ćwiczeń.

  2. 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 RSVP dołącza informacje gościa do listy, a ShowRSVPs metoda wyświetla sumę RSVP przy użyciu sekwencji ucieczki tabulatora w celu oddzielenia informacji gościa.

  3. Wprowadź następujący kod w metodzie , RSVP aby 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ść found true i przerwać pętlę foreach . Jeśli found ma wartość false, zostanie wyświetlony komunikat i użyj słowa kluczowego return , aby zakończyć metodę.

  4. Wywołaj metodę, dodając następujący kod powyżej RSVP podpisu 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();
    
  5. 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.

  1. Znajdź następujący wiersz kodu: RSVP("Linh", 2, "none", false);

  2. 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" i 2 na 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 argument

  3. Znajdź następujący wiersz kodu: RSVP("Tony", 1, "Jackfruit", true);

  4. 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 Tony jest jednak argumentem pozycyjnym i musi pojawić się w pasującej pozycji.

  5. 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
    

    Zwróć 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.

  1. Aby zdefiniować parametry opcjonalne, zaktualizuj sygnaturę RSVP metody 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, allergiesi inviteOnly są przypisane do wartości.

    Następnie zaktualizujesz wywołania do RSVP, aby zastosować parametry opcjonalne.

  2. 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", true z RSVP Rebeki. Ponieważ te argumenty są zgodne z wartością domyślną, wynik rsvp Rebecca jest taki sam.

    Usunięto argument inviteOnly z odpowiedzi Nadia na zaproszenie. Ponieważ wartość inviteOnly domyślna to true, wynik rsvp Nadia jest taki sam.

    Usunięto partySize argument z odpowiedzi na zaproszenie Tony'ego. Gdyby Tony miał zaproszenie, domyślna wartość partySize będzie używana w RSVP.

    Usunięto allergies argument zarówno z odpowiedzi na zaproszenia Linh, jak i Noor. Ich rsvps wyświetli domyślną wartość none dla "Alergie".

  3. 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
    

    Zwróć uwagę, że wartości domyślne są używane zamiast pominiętych argumentów, takich jak partySize i allergies.

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.