Menu
Coddy logo textTech

Parametry opcjonalne

Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 48 z 70.

Parametry opcjonalne pozwalają definiować wartości domyślne dla parametrów metody. Gdy wywołujący nie poda wartości dla danego parametru, automatycznie używana jest wartość domyślna.

Tworzysz opcjonalny parametr, przypisując wartość domyślną w sygnaturze metody:

public static void Greet(string name, string greeting = "Hello")
{
    Console.WriteLine(greeting + ", " + name + "!");
}

// Oba wywołania działają
Greet("Alice");              // Hello, Alice!
Greet("Bob", "Welcome");     // Welcome, Bob!

Parametry opcjonalne muszą występować po wszystkich wymaganych parametrach. Możesz mieć wiele parametrów opcjonalnych, a wywołujący mogą pomijać dowolne z nich, zaczynając od prawej strony:

public static void CreateUser(string name, int age = 0, bool isActive = true)
{
    Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}

CreateUser("Emma");                    // Emma, Age: 0, Active: True
CreateUser("James", 25);               // James, Age: 25, Active: True
CreateUser("Sarah", 30, false);        // Sarah, Age: 30, Active: False

Wartości domyślne muszą być stałymi znanymi w czasie kompilacji — literałami, wartościami const lub wyrażeniami default. Nie możesz używać zmiennych ani wywołań metod jako wartości domyślnych. Dzięki temu parametry opcjonalne idealnie nadają się do ustawień konfiguracji i metod, w których większość wywołujących używa typowych wartości.

challenge icon

Wyzwanie

Łatwy

Stwórzmy system powiadomień, który wykorzystuje parametry opcjonalne, aby umożliwić elastyczne formatowanie wiadomości. Utworzysz klasę narzędziową, która może wysyłać powiadomienia z konfigurowalnymi ustawieniami, przy czym większość wywołujących będzie korzystać z odpowiednich wartości domyślnych.

Podzielisz kod na dwa pliki:

  • NotificationService.cs: Utwórz klasę NotificationService w przestrzeni nazw Notifications z metodą pokazującą użycie parametrów opcjonalnych:
    • SendNotification(string message, string priority = "Normal", bool addTimestamp = true) — ta metoda powinna zwracać sformatowany ciąg powiadomienia. Gdy addTimestamp ma wartość true, dodaj [TIMESTAMP] przed wiadomością. W zależności od ustawienia znacznika czasu format powinien mieć postać: [Priority] Message lub [TIMESTAMP] [Priority] Message.
  • Program.cs: W głównym pliku pokaż, jak działają parametry opcjonalne, wywołując SendNotification na trzy różne sposoby — używając wszystkich wartości domyślnych, nadpisując jeden parametr i nadpisując oba parametry opcjonalne.

Otrzymasz trzy dane wejściowe:

  • Pierwsza wiadomość (użyje wszystkich wartości domyślnych)
  • Druga wiadomość (użyje priorytetu "Urgent" i domyślnego znacznika czasu)
  • Trzecia wiadomość (użyje priorytetu "Low" i nie będzie miała znacznika czasu)

Wywołaj SendNotification trzy razy i wypisz każdy wynik:

  1. Pierwsze wywołanie: przekaż tylko pierwszą wiadomość (użyje wartości domyślnych: priorytetu "Normal" i włączonego znacznika czasu)
  2. Drugie wywołanie: przekaż drugą wiadomość z priorytetem "Urgent" (znacznik czasu nadal będzie domyślnie włączony)
  3. Trzecie wywołanie: przekaż trzecią wiadomość z priorytetem "Low" i wartością false dla znacznika czasu

Na przykład, jeśli dane wejściowe to System started, Server overload i Cache cleared, wynikiem powinno być:

[TIMESTAMP] [Normal] System started
[TIMESTAMP] [Urgent] Server overload
[Low] Cache cleared

Zauważ, jak ta sama metoda elegancko obsługuje wszystkie trzy scenariusze — wywołujący określają tylko to, co chcą zmienić względem wartości domyślnych!

Spróbuj swoich sił

using System;
using Notifications;

class Program
{
    public static void Main(string[] args)
    {
        // Wczytaj trzy wiadomości
        string message1 = Console.ReadLine();
        string message2 = Console.ReadLine();
        string message3 = Console.ReadLine();

        // Utwórz instancję NotificationService
        NotificationService service = new NotificationService();

        // TODO: Wywołaj SendNotification trzy razy i wypisz każdy wynik:
        // 1. Pierwsze wywołanie: przekaż tylko message1 (używa wszystkich wartości domyślnych)
        // 2. Drugie wywołanie: przekaż message2 z priorytetem "Urgent" (timestamp ma domyślnie wartość true)
        // 3. Trzecie wywołanie: przekaż message3 z priorytetem "Low" i wartością false dla timestamp

    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C# online