Поделиться через


Модификатор параметров 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#).

Пример

Объявление метода 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#)

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

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

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

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