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


Передача массивов при помощи параметров ref и out (Руководство по программированию на C#)

Как и все параметры out, параметр out типа массива перед использованием необходимо присвоить; то есть, он должен быть присвоен вызываемым.Примеры.

static void TestMethod1(out int[] arr)
{
    arr = new int[10];   // definite assignment of arr
}

Как и все параметры ref, параметр ref типа массива должен быть определенным образом присвоен вызывающим.Таким образом, четкое присвоение вызываемым не требуется.Параметр ref типа массива можно изменять как результат вызова.Например, массиву можно присвоить значение null, или же его можно инициализировать в другой массив.Примеры.

static void TestMethod2(ref int[] arr)
{
    arr = new int[10];   // arr initialized to a different array
}

Следующие два примера демонстрируют отличия между параметрами out и ref при использовании для подстановки массивов в методы.

Пример

В этом примере массив theArray объявлен в вызывающем (метод Main) и инициализирован в методе FillArray.Затем элементы массива возвращаются вызывающему и отображаются.

class TestOut
{
    static void FillArray(out int[] arr)
    {
        // Initialize the array:
        arr = new int[5] { 1, 2, 3, 4, 5 };
    }

    static void Main()
    {
        int[] theArray; // Initialization is not required

        // Pass the array to the callee using out:
        FillArray(out theArray);

        // Display the array elements:
        System.Console.WriteLine("Array elements are:");
        for (int i = 0; i < theArray.Length; i++)
        {
            System.Console.Write(theArray[i] + " ");
        }

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
    /* Output:
        Array elements are:
        1 2 3 4 5        
    */

В этом примере массив theArray инициализирован в вызывающем (метод Main) и подставляется в метод FillArray при помощи параметра ref.Некоторые из элементов массива обновляются в методе FillArray.Затем элементы массива возвращаются вызывающему и отображаются.

class TestRef
{
    static void FillArray(ref int[] arr)
    {
        // Create the array on demand:
        if (arr == null)
        {
            arr = new int[10];
        }
        // Fill the array:
        arr[0] = 1111;
        arr[4] = 5555;
    }

    static void Main()
    {
        // Initialize the array:
        int[] theArray = { 1, 2, 3, 4, 5 };

        // Pass the array using ref:
        FillArray(ref theArray);

        // Display the updated array:
        System.Console.WriteLine("Array elements are:");
        for (int i = 0; i < theArray.Length; i++)
        {
            System.Console.Write(theArray[i] + " ");
        }

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
    /* Output:
        Array elements are:
        1111 2 3 4 5555
    */

См. также

Ссылки

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

Одномерные массивы (Руководство по программированию на C#)

Многомерные массивы (Руководство по программированию на C#)

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

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

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