Необязательные и именованные параметры; 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 не поддерживает параметры 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 — локальная установка не требуется.
Все уроки этого курса
- Сигнатуры и возвращаемые значения; методы с телом-выражением; необязательные и именованные параметры; ref/out; перегрузка
- Необязательные и именованные параметры; ref/out/in (основы)
- Локальные функции (примечание о C# 6) и перегрузка