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

Обновлен: Ноябрь 2007

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

Пример

Объявление метода out используется тогда, когда необходимо, чтобы метод возвращал несколько значений. Метод, использующий параметр out, по-прежнему имеет доступ к переменным как возвращаемый тип (см. return), но может также возвращать один или несколько объектов вызывающему методу в качестве параметров 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#:

  • 5.1.6 Выходные параметры

  • 10.6.1.3 Выходные параметры

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Ключевые слова C#

Параметры методов (Справочник по C#)

Другие ресурсы

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