Yurijnd.com
Четверг, 06.02.2025, 19:49
Меню сайта

Вход на сайт

Поиск

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

  • Статистика

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

    Массивы в качестве параметров

    Массивы могут передаваться в методы в качестве параметров, а также возвращаться из методов. Для возврата массива достаточно объявить массив как тип возврата. Наглядно это показано в следующем примере:

     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
     class Program
     {
     static void Main(string[] args)
     {
     foreach (string s in myReturn())
     Console.WriteLine(s);
     int[] mySortArray = {4,1,2,5,3};
    
     for (int i = 0; i <= 4; i++)
     mySortArray[i] = mySort(mySortArray, i);
    
     Console.WriteLine("\nОтсортированный массив:\n");
     foreach (int i in mySortArray)
     Console.Write("\t"+i);
    
     Console.ReadLine();
     }
    
     // Данный метод возвращает массив Info
     static Array myReturn()
     {
     string[] Info = {"Name","Family","Adress" };
     return Info;
     }
    
     // Передача массива в метод в качестве параметра
     // Данный метод возвращает значение одного из индексов
     // отсортированного массива
     static int mySort(Array sortArray, int i)
     {
     Array.Sort(sortArray);
     return (int)sortArray.GetValue(i);
     }
     }
    }

    Результат работы данной программы:

     
    Использование массива в качестве параметра

    Ковариантость массивов

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

    Добавлю, что с ковариантностью массивов связана проблема, которая может быть решена только через исключения времени выполнения.

    Структура ArraySegment<T>

    Структура ArraySegment<T> представляет сегмент массива. Эта структура может применяться, когда нужно вернуть или передать методу части массива. Вместо передачи в метод массива, смещения и счетчика в отдельных параметрах, можно передать единственный параметр ArraySegment<T>. В этой структуре информация о сегменте (смещение и счетчик) заключена непосредственно в ее членах:

     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
     class Program
     {
     static void Main(string[] args)
     {
     int[] arr1 = { 1, 2, 3, 4, 5, 6 };
     int[] arr2 = { 7, 8, 9, 10 };
    
     var mySegmentsArray = new ArraySegment<int>[3]
     {
     // Инициализируем сегменты массивов
     new ArraySegment<int>(arr1,0,2),
     new ArraySegment<int>(arr2,0,1),
     new ArraySegment<int>(arr1,1,2)
     };
    
     Console.WriteLine("Сумма выбранных значений равна:\n"+SumArraySegments(mySegmentsArray));
     Console.ReadLine();
     }
    
     // Метод, вычисляющий сумму выбранных сегментов
     static int SumArraySegments(ArraySegment<int>[] value)
     {
     int sum = 0;
     foreach (var s in value)
     for (int i = s.Offset; i < s.Offset + s.Count; i++)
     sum += s.Array[i];
     return sum;
     }
     }
    }

    Важно отметить, что сегменты массива не копируют элементы исходного массива. Вместо этого через ArraySegment<T> можно получить доступ к исходному массиву. Если изменяются элементы сегмента, то эти изменения будут видны в исходном массиве.

     
     
    Copyright MyCorp © 2025
    Сделать бесплатный сайт с uCoz