0Pricing
C# Academy · Урок

Необязательные и именованные параметры; ref/out/in (основы)

Используйте необязательные параметры и именованные аргументы для ясности; передавайте данные по ссылке с помощью ref; возвращайте дополнительные значения через out; учитывайте, что параметры in недоступны в C# 6.

«Необязательные и именованные параметры; ref/out/in (основы)» — бесплатный урок C# Academy на CoddyKit. Это урок 2 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 3 уроков всего.

Обзор урока

Цель: использовать необязательные параметры и именованные аргументы для повышения понятности; разобраться в ref и out. Примечание: параметры in недоступны в C# 6.

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

Добавляйте значения по умолчанию для простой настройки без множества перегрузок.

using System;

public static class Notifier
{
  // Optional parameter: suffix has a default value
  public static void Notify(string message, string suffix = "!")
  {
    Console.WriteLine(message + suffix);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Notifier.Notify("Saved");          // uses "!"
    Notifier.Notify("Warning", "!!");  // overrides default
  }
}

Именованные аргументы

Именованные аргументы делают вызовы понятными без дополнительного контекста и позволяют безопасно менять порядок аргументов.

using System;

public static class Greeter
{
  public static void Greet(string name, string prefix, int repeat)
  {
    for (int i = 0; i < repeat; i = i + 1)
    {
      Console.WriteLine(prefix + " " + name);
    }
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    // Named args improve readability and allow reordering at call site
    Greeter.Greet(name: "Ada", prefix: "Hello", repeat: 2);
    Greeter.Greet(repeat: 1, name: "Alan", prefix: "Hi");
  }
}

Параметр ref

ref передает переменную по ссылке; вызывающая сторона должна сначала ее инициализировать.

using System;

public static class RefDemo
{
  public static void Increment(ref int n)
  {
    n = n + 1; // modifies caller's variable
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    int value = 5;           // must be assigned before passing by ref
    RefDemo.Increment(ref value);
    Console.WriteLine("value = " + value); // 6
  }
}

Параметр out

out позволяет методу возвращать дополнительные значения через параметры; метод должен присвоить им значения.

using System;

public static class OutDemo
{
  public static bool TryDivide(int a, int b, out int result)
  {
    if (b == 0)
    {
      result = 0;   // out must be assigned before return
      return false;
    }
    result = a / b;
    return true;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    int r; // not required to be assigned before passing as out
    bool ok = OutDemo.TryDivide(9, 0, out r);
    Console.WriteLine("ok=" + ok + " r=" + r);
  }
}

О параметре «in» (C# 6)

Примечание: параметры in (только для чтения, передаваемые по ссылке) появились в более поздних версиях C#. В C# 6 можно:

  • Передавать небольшие типы по значению (копированием)
  • Использовать ref только когда требуется изменение данных
  • Считать параметры метода только для чтения по соглашению (не присваивать им новые значения)

Основы ref и out

Быстрая проверка: какое утверждение о ref и out верно в C# 6?

Итоги

Итоги: используйте необязательные параметры для значений по умолчанию, именованные аргументы для ясности, ref для изменения данных вызывающей стороны и out для возврата дополнительных значений. C# 6 не поддерживает параметры in.

Часто задаваемые вопросы

Урок «Необязательные и именованные параметры; ref/out/in (основы)» бесплатный?

Да — полный текст урока «Необязательные и именованные параметры; ref/out/in (основы)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 3 уроков всего.

Чему я научусь в уроке «Необязательные и именованные параметры; ref/out/in (основы)»?

Используйте необязательные параметры и именованные аргументы для ясности; передавайте данные по ссылке с помощью ref; возвращайте дополнительные значения через out; учитывайте, что параметры in недос… Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 3.

Сколько времени занимает урок «Необязательные и именованные параметры; ref/out/in (основы)»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Сигнатуры и возвращаемые значения; методы с телом-выражением; необязательные и именованные параметры; ref/out; перегрузка
  2. Необязательные и именованные параметры; ref/out/in (основы)
  3. Локальные функции (примечание о C# 6) и перегрузка
← Назад к C# Academy