Yurijnd.com
Понедельник, 14.07.2025, 22:03
Меню сайта

Вход на сайт

Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

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

    Visual Studio 2013
     

    Как и все параметры 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
     */
    
     
    Copyright MyCorp © 2025
    Сделать бесплатный сайт с uCoz