out (Справочник по C#)

Контекстно-зависимое ключевое слово out можно использовать в двух контекстах (каждый представляет собой ссылку на подробные сведения) — как модификатор параметра или в объявлениях параметра универсального типа в интерфейсах и делегатах. В этом разделе содержатся сведения о модификаторе параметра, однако сведения об объявлениях параметра универсального типа см. в в этом разделе.

Ключевое 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.

  • Методы итератора, которые включают инструкцию yield return или yield break.

Пример

Объявление метода out полезно в случае, если требуется, чтобы метод возвращал несколько значений. В следующем примере используется out для возвращения трех переменных с помощью вызова одного метода. Обратите внимание, что третьему аргумент присвоено значение null. Это позволяет методам возвращать значения по желанию.

    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#