На этом шаге мы рассмотрим механизмы возврата массива из метода.
Метод может возвращать результатом массив. Точнее, метод может возвращать ссылку на массив. Обычно схема такая: при вызове метода создается массив, а результатом метод возвращает ссылку на него. Как уже отмечалось, переменные, которые создаются при вызове метода, существуют, пока метод выполняется, а после завершения метода они удаляются из памяти. В принципе, массив, который создан при вызове метода, также является "кандидатом на удаление". Но если ссылка на массив возвращается методом как результат и присваивается в качестве значения, например, какой-то переменной, то эта переменная (объявленная до вызова метода) будет ссылаться на массив. Такой массив не будет удален из памяти даже после завершения выполнения метода.
Если метод возвращает результатом ссылку на массив, то тип результата метода указывается точно так же, как он указывается для переменной массива того же типа. Например, если метод возвращает результатом ссылку на одномерный целочисленный массив, то идентификатор типа для такого метода выглядит как int[]. Если метод возвращает результатом ссылку на двумерный символьный массив, то идентификатор типа результата метода имеет вид char[,].
Ниже представлена программа, где описано несколько статических методов, возвращающих в качестве результата массив.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr68_1 { class Program { // Метод для создания массива с числами Фибоначчи: static int[] fibs(int n){ // Создается массив: int[] nums = new int [n]; // Первый элемент массива: nums[0] = 1; // Если массив из одного элемента: if ( nums.Length == 1 ) return nums; // Второй элемент массива: nums[1] = 1; // Заполнение элементов массива: for (int k=2; k < nums.Length; k++){ // Значение элемента массива равно сумме значений // двух предыдущих элементов: nums[k] = nums[k-1] + nums[k-2]; } // Результат метода - ссылка на массив: return nums; } // Метод для создания массива со случайными символами: static char[] rands(int n){ // Объект для генерирования случайных чисел: Random rnd = new Random(); // Создание массива: char[] symbs = new char [n]; // Заполнение массива: for(int k=0; k < symbs.Length; k++){ // Значение элемента - случайный символ: symbs[k] = (char)('A' + rnd.Next(26)); } // Результат метода - ссылка на массив: return symbs; } // Метод для создания двумерного массива с нечетными // числами: static int[,] odds(int m, int n) { // Создание двумерного массива: int[,] nums = new int[m, n]; // Локальная переменная: int val = 1; // Перебор строк массива: for (int i=0; i < nums.GetLength(0); i++){ // Перебор элементов в строке: for(int j=0; j < nums.GetLength(1); j++){ // Значение элемента: nums[i, j] = val; // Значение для следующего элемента: val += 2; } } // Результат метода - ссылка на массив: return nums; } // Главный метод программы: static void Main() { // Переменная для целочисленного массива: int[] A; // Переменная для символьного массива: char[] B; // Переменная для двумерного массива: int[,] C; // Создается массив с числами Фибоначчи: A = fibs(10); Console.WriteLine("Числа Фибоначчи:"); // Отображение содержимого массива: foreach (int s in A){ Console.Write("| {0} ", s); } Console.WriteLine("|"); // Создается массив со случайными символами: B = rands(8); Console.WriteLine("Случайные символы:"); // Отображение содержимого массива: foreach (char s in B){ Console.Write("| {0} ", s); } Console.WriteLine("|"); // Создается двумерный массив с нечетными числами: C = odds(4, 6); Console.WriteLine("Двумерный массив:"); // Отображение содержимого двумерного массива: for(int i=0; i < C.GetLength(0); i++) { for(int j=0; j < C.GetLength(1); j++) { Console.Write("{0, 4}", C[i, j]); } Console.WriteLine(); } // Задержка: Console.ReadLine(); } } }
В результате выполнения программы в консольном окне могут появиться такие сообщения (нужно учесть, что в программе использован генератор случайных чисел).
Рис.1. Результат работы приложения
В программе описывается три статических метода. Каждый из них возвращает результатом ссылку на массив. Метод fibs() создает одномерный целочисленный массив, заполняет его числами Фибоначчи, а результатом возвращает ссылку на этот массив.
Аргументом методу передается целое число, определяющее размер массива. Идентификатором типа результата указана инструкция int[]. В теле метода командой
int[] nums = new int[n];
nums[0] = 1;
return nums;
nums[1] = 1;
После того как первым двум элементам присвоены значения, с помощью конструкции цикла перебираются прочие элементы массива, и при заданном индексе k командой
nums[k] = nums[k - 1] + nums[k - 2];
return nums;
Метод rands() предназначен для создания одномерного массива, заполненного случайными символами. Результат массива имеет тип char[] (ссылка на символьный массив), а аргументом методу передается целое число, определяющее размер массива. В теле метода создается объект rnd класса Random для генерации случайных чисел: команда
Random rnd = new Random(); .
Командой
char[] symbs = new char[n];
symbs[k] = (char)('A' + rnd.Next(26));
return symbs;
Метод odds() создает двумерный целочисленный массив, заполняет его нечетными числами и возвращает ссылку на этот массив. У метода два целочисленных аргумента, которые определяют количество строк и столбцов в двумерном массиве. Идентификатор типа результата имеет вид int[,] (ссылка на двумерный целочисленный массив).
В теле метода двумерный массив создается командой
int[,] nums = new int [m, n]; .
nums[i, j] = val; .
val += 2;
В главном методе программы объявляется несколько переменных массива:
A = fibs(10);
B = rands(8);
C = odds(4, 6);
На следующем шаге мы рассмотрим механизмы передачи аргументов методу.