Menu
Coddy logo textTech

Необязательные параметры

Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 48 из 70.

Необязательные параметры позволяют определять значения по умолчанию для параметров метода. Если вызывающая сторона не предоставляет значение для такого параметра, автоматически используется значение по умолчанию.

Вы создаете необязательный параметр, присваивая значение по умолчанию в сигнатуре метода:

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

// Оба вызова работают
Greet("Alice");              // Hello, Alice!
Greet("Bob", "Welcome");     // Welcome, Bob!

Необязательные параметры должны следовать после всех обязательных параметров. Вы можете использовать несколько необязательных параметров, и вызывающая сторона может опускать любые из них, начиная справа:

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

Значения по умолчанию должны быть константами времени компиляции — литералами, значениями const или выражениями default. Вы не можете использовать переменные или вызовы методов в качестве значений по умолчанию. Это делает необязательные параметры идеальными для настроек конфигурации и методов, в которых большинство вызывающих сторон используют общие значения.

challenge icon

Задание

Легко

Давайте создадим систему уведомлений, которая использует необязательные параметры для обеспечения гибкого форматирования сообщений. Вы создадите вспомогательный класс, который может отправлять уведомления с настраиваемыми параметрами, где большинство вызывающих сторон будут использовать разумные значения по умолчанию.

Вы организуете свой код в двух файлах:

  • NotificationService.cs: Создайте класс NotificationService в пространстве имен Notifications с методом, демонстрирующим необязательные параметры:
    • SendNotification(string message, string priority = "Normal", bool addTimestamp = true) — этот метод должен возвращать отформатированную строку уведомления. Если addTimestamp имеет значение true, добавьте к сообщению префикс [TIMESTAMP]. Формат должен быть следующим: [Priority] Message или [TIMESTAMP] [Priority] Message в зависимости от настройки временной метки.
  • Program.cs: В основном файле продемонстрируйте работу необязательных параметров, вызвав SendNotification тремя разными способами: используя все значения по умолчанию, переопределив один параметр и переопределив оба необязательных параметра.

Вы получите три входных значения:

  • Первое сообщение (будут использоваться все значения по умолчанию)
  • Второе сообщение (будет использоваться приоритет "Urgent" с временной меткой по умолчанию)
  • Третье сообщение (будет использоваться приоритет "Low" и без временной метки)

Вызовите SendNotification три раза и выведите каждый результат:

  1. Первый вызов: передайте только первое сообщение (используются значения по умолчанию: приоритет "Normal", временная метка включена)
  2. Второй вызов: передайте второе сообщение с приоритетом "Urgent" (временная метка по-прежнему по умолчанию true)
  3. Третий вызов: передайте третье сообщение с приоритетом "Low" и значением false для временной метки

Например, если входные данные — System started, Server overload и Cache cleared, вывод должен быть следующим:

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

Обратите внимание, как один и тот же метод элегантно обрабатывает все три сценария — вызывающие стороны указывают только то, что им нужно изменить по сравнению со значениями по умолчанию!

Шпаргалка

Необязательные параметры позволяют определять значения по умолчанию для параметров метода. Если вызывающая сторона не предоставляет значение, автоматически используется значение по умолчанию.

Создайте необязательный параметр, присвоив значение по умолчанию в сигнатуре метода:

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

// Оба вызова работают
Greet("Alice");              // Hello, Alice!
Greet("Bob", "Welcome");     // Welcome, Bob!

Необязательные параметры должны располагаться после всех обязательных параметров. Вы можете использовать несколько необязательных параметров:

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

Значения по умолчанию должны быть константами времени компиляции — литералами, значениями const или выражениями default. Вы не можете использовать переменные или вызовы методов в качестве значений по умолчанию.

Попробуйте сами

using System;
using Notifications;

class Program
{
    public static void Main(string[] args)
    {
        // Прочитать три сообщения
        string message1 = Console.ReadLine();
        string message2 = Console.ReadLine();
        string message3 = Console.ReadLine();

        // Создать экземпляр NotificationService
        NotificationService service = new NotificationService();

        // TODO: Вызвать SendNotification три раза и вывести каждый результат:
        // 1. Первый вызов: передать только message1 (используются все значения по умолчанию)
        // 2. Второй вызов: передать message2 с приоритетом "Urgent" (timestamp по умолчанию равен true)
        // 3. Третий вызов: передать message3 с приоритетом "Low" и false для timestamp

    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование