Модификатор параметров out (справочник по C#)
Ключевое слово out используется для передачи аргументов по ссылке. Оно похоже на ключевое слово ref, за исключением того, что ref требует инициализации переменной перед ее передачей. Для работы с параметром out определение метода и вызывающий метод должны явно использовать ключевое слово out. Примеры.
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
Несмотря на то что переменные, передаваемые в качестве аргументов out, могут не инициализироваться перед передачей, вызываемый метод должен присвоить значение перед возвратом метода.
Ключевые слова ref и out приводят к разным результатам во время выполнения, однако во время компиляции они не считаются частью сигнатуры метода. Поэтому, если единственное различие между методами заключается в том, что один метод принимает аргумент ref, а другой — out, они не могут быть перегружены. Следующий пример кода не будет компилироваться.
class CS0663_Example
{
// Compiler error CS0663: "Cannot define overloaded
// methods that differ only on ref and out".
public void SampleMethod(out int i) { }
public void SampleMethod(ref int i) { }
}
Однако перегрузка возможна, если один метод принимает аргумент ref или out, а другой не принимает ни одного, как показано в следующем примере:
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
Свойства не являются переменными и поэтому не могут быть переданы в качестве параметров out.
Сведения о передаче массивов см. в разделе Передача массивов при помощи параметров ref и out (Руководство по программированию на C#).
Нельзя использовать ключевые слова ref и out для следующих типов методов:
Методы Async, которые можно указать с помощью модификатора async.
Методы итератора, которые включают формулировку получение выходных данных или yield break.
Пример
Объявление метода out используется тогда, когда необходимо, чтобы метод возвращал несколько значений. В следующем примере используется ключевое слово out для возврата трех переменных с помощью одного вызова метода. Обратите внимание, что третьему аргументу начинается значение 0. Это позволяет методам возвращать значения на выбор.
class OutReturnExample
{
static void Method(out int i, out string s1, out string s2)
{
i = 44;
s1 = "I've been returned";
s2 = null;
}
static void Main()
{
int value;
string str1, str2;
Method(out value, out str1, out str2);
// value is now 44
// str1 is now "I've been returned"
// str2 is (still) null;
}
}
Спецификация языка C#
Дополнительные сведения см. в Спецификация языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.
См. также
Ссылки
Параметры методов (Справочник по C#)
Основные понятия
Руководство по программированию на C#