TGViewer
C# (C Sharp) programming C# (C Sharp) programming @csharp_ci · 18.1K subscribers
Post #778 4.9K
🖥 Чем out отличается от ref?

▶️Функция с параметром с ключевым словом out даёт такой же результат, как и с ref.

Такой код:
private void func(out string value)
{
value = "Hello World!";
}


Даёт такой же эффект, как и:
private void func(ref string value)
{
value = "Hello World!";
}

В чём же разница между out и ref?


▶️Разница в том, что out — это выходной параметр, а ref — входно-выходной.

Для ref-параметра вы должны передать его инициализированным, и можете пользоваться его исходным значением. А для out-параметра вы не обязаны инициализировать его перед вызовом функции, не можете использовать его значение в функции до присваивания, и обязаны инициализировать его в функции.

(Таким образом, ref-параметр немного напоминает инициализированную локальную переменную, а out-параметр — неинициализированную.)

Иллюстрация:
private void func1(out string value)
{
Console.WriteLine(value); // нельзя, value не инициализировано
if (false)
return; // нельзя, забыли установить значение value
value = "Hello World!";
}

string s1;
func1(out s1);
private void func2(ref string value)
{
Console.WriteLine(value); // можно
if (false)
return; // не проблема, у value остаётся старое значение
value = "Hello World!";
}

string s2;
func2(ref s2); // нельзя, функция имеет право использовать значение,
// значит, оно должно быть инициализировано сначала


Таким образом, out-параметр — это как бы дополнительное возвращаемое значение функции. А ref-параметр — просто параметр, изменения которого видны снаружи функции.

@csharp_ci
More from @csharp_ci
  1. Oct 13, 2026🧱 Модульный монолит легко потерять одним удобным JOIN. Допустим, модуль заказов напрямую…
  2. Oct 11, 2026Задачка по C# 14: обновили проект на .NET 10, и код молча начал работать иначе Что выведет…
  3. Oct 9, 2026Post #1901
  4. Oct 7, 2026⚡️ Microsoft переработала C# Dev Kit: меньше памяти, быстрее запуск В версии 11.0 шесть пр…
  5. Oct 6, 2026🛠 Вышел Microsoft.Data.SqlClient 7.1.1 Обновление .NET-драйвера для SQL Server исправляет…
  6. Oct 5, 2026Одна задача, три языка: Rust, C# или C++? В курсе Google *Comprehensive Rust* есть упражне…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →