Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка для КР по ООП.doc
Скачиваний:
8
Добавлен:
18.04.2019
Размер:
2.47 Mб
Скачать

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

В качестве параметра методу всегда можно передать ссылку на ОДНОМЕРНЫЙ массив. Массив, первая спецификация размерности которого в объявлении имеет вид …[] …

Тип и количество составляющих данный массив компонентов для механизма передачи параметров значения не имеют. Важно, что в стеке будет выделено определённое (соответствующее значению первой размерности) количество проинициализированных ссылок на составляющие данный одномерный массив элементов.

Этот принцип действует во всех случаях. В том числе и при вызове приложения из командной строки.

Вызов приложения из командной строки с передачей ему в качестве параметров массива ОДНОТИПНЫХ (строковых) значений.

using System;

class C1

{

static void Main(string[] args)

{

Console.WriteLine(“Values of parameters:”);

for (int i = 0; I < args.Length; i++)

{

Console.WriteLine(“{0}: {1}”, i, args[i]);

}

}

}

Сначала создаётся консольное приложение (пусть под именем ComLine, в файле ComLine.cs).

Транслятор можно запустить из командной строки, выглядит это примерно так:

C:> csc /t:exe ConLine.cs

Результат деятельности транслятора размещается в .exe файле под именем ConLine.exe и также может быть запущен из командной строки с передачей строк символов в качестве входных параметров.

C:>ConLine qwerty asdfgh zxcvbn ok ok ok-k

В окне консольного приложения отобразится следующее множество строк:

Values of parameters:

0: qwerty

1: asdfgh

2: zxcvbn

3: ok

4: ok

5: ok-k

А теперь с использованием оператора foreach:

using System;

class C1

{

static void Main(string[] args)

{

Console.WriteLine(“Values of parameters, using foreach:”);

foreach (string arg in args)

{

Console.WriteLine(“{0}”, arg);

}

}

}

Запускаем:

C:>ConLine qwerty asdfgh zxcvbn ok ok ok-k

Получаем:

Values of parameters, using foreach:

qwerty

asdfgh

zxcvbn

ok

ok

ok-k

Полностью построенный массив можно передать в качестве входного параметра методу.

Пустая ссылка на массив может быть передана методу в качестве выходного параметра.

Например:

int[] myArray; // myArray == null

PrintArray(myArray);

Можно также совместить передачу массива как параметра методу с предварительной инициализацией этого массива. Например:

PrintArray(new int[] {1, 3, 5, 7, 9});

In the following example, a string array is initialized and passed as a parameter to the PrintArray method, where its elements are displayed:

// cs_sd_arrays.cs

using System;

public class ArrayClass

{

static void PrintArray(string[] w)

{

for (int i = 0 ; i < w.Length ; i++)

{

Console.Write(w[i] + “{0}”, i < w.Length - 1 ? “ ” : “”);

}

Console.WriteLine();

}

public static void Main()

{

// Declare and initialize an array:

string[] WeekDays = new string []

{”Sun”,”Sat”,”Mon”,”Tue”,”Wed”,”Thu”,”Fri”};

// Pass the array as a parameter:

PrintArray(WeekDays);

}

}

Вывод:

Sun Sat Mon Tue Wed Thu Fri

Спецификатор params

Неопределённое (переменное) количество (ОДНОТИПНЫХ!) параметров или список параметров переменной длины.

Это всегда последний параметр в списке параметров со спецификатором params.

В выражении вызова метода должен располагаться либо список однотипных параметров (этот список преобразуется в массив значений), либо ссылка на ОДНОМЕРНЫЙ массив значений определённого типа.

using System;

class Class1

{

static void Main(string[] args)

{

f1(0,1,2,3,4,5);

f1(0,1,2,3,4,5,6,7,8,9,10);

f2(new int[,]{{0,1},{2,3}}, new int[,]{{0,1,2,3,4,5},{6,7,8,9,10,11}});

f2(new int [,]{{0,1},{2,3}});

}

static void f1(params int[] m)

{

Console.WriteLine(m.Length.ToString());

}

static void f2(params int[][,] p)

{

Console.WriteLine(p.Length.ToString());

}

}