Скачиваний:
74
Добавлен:
24.03.2015
Размер:
300.54 Кб
Скачать

1 4 9 16 25 36

В программе метод (функция) newAr(), получив в качестве аргумента целое неотрицательное значение, создаёт одномерный целочисленный массив, присваивает его элементам значения и возвращает в точку вызова ссылку на сформированный массив. В методе Main() определена переменная-ссылка vector на целочисленный массив и ей присвоен результат вызова метода newAr(). Результаты выполнения программы иллюстрируют сказанное.

9.4. Методы с переменным числом аргументов

У параметра с модификатором params назначение особое - он представляет в методе список аргументов неопределённой (заранее не фиксированной) длины. Его тип - одномерный массив с элементами типа, указанного в спецификации параметра.

Как уже сказано, этот параметр может быть только последним (или единственным) в списке параметров. В обращении к методу этот параметр заменяется списком аргументов, каждый из которых должен иметь тот же тип, что и элементы массива параметров. В теле метода отдельные реально использованные аргументы представлены элементами массива-параметра. Количество аргументов соответствует длине массива.

В качестве примера приведём программу с методом для вычисления значений полинома Pn(x)=a0*xn+ai*xn-1+...+an-i*x+an:

// 09_12.cs - массив-параметр

// Вычисляет значение полинома с целыми коэффициентами:

static double polynom(double x, params int [] coef)

{

double result = 0.0;

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

result = result * x + coef[i]; return result;

}

static void Main()

{

Console.WriteLine(polynom(3.0, 3, 1, 2));

}

Результат выполнения программы:

32

Метод polynom() возвращает значение типа double, то есть играет роль функции. Первый параметр double x представляет значение аргумента полинома. Второй параметр params int [] coef даёт возможность передать в метод список коэффициентов полинома a0, ai, .. an-i, an. Все коэффициенты должны иметь целочисленные значения. Их реальное количество, то есть степень полинома, при обращении определяется числом использованных аргументов, а в теле метода - значением поля coef.Length. В теле метода:

coef[0]=a0, coef[1]= ai, ..., coef[n]=an.

Для вычисления полинома использована схема Горнера, позволяющая заменить явные возведения в степень последовательными умножениями: Pn(x)=(...( a0*x+ a1)*x+a2)*x+...+ an-i)*x+ an

В том случае, когда требуется метод, принимающий произвольное число параметров любых разных типов, Дж. Рихтер [10] предлагает использовать параметр вида params Object[]. Он приводит в качестве примера метод, который выводит обозначения (наименования) типов всех переданных методу аргументов. Вот программа с этим методом:

// 09_13.cs - массив-параметр "универсального" типа

// Метод выводит названия типов аргументов:

static void DisplayTypes(params Object[] objects)

{ foreach (Object o in objects)

Console.WriteLine(o.GetType());

}

static void Main09_13()

{ DisplayTypes("yes", 432, new Object()); }

Результат выполнения программы:

System.String

System.Int32

System.Object

Обратим внимание, что параметр, снабжённый модификатором params, обеспечивает передачу аргументов по значению, т.е. значения аргументов после выполнения метода не изменяются. Следующая программа иллюстрирует это правило.

// 09_14.cs - переменное число аргументов

static void varParams(params int[] var)

{

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

{

var[i] *= 2;

Console.Write("var[{0}]={1} ", i, var[i]);

}

}

static void Main()

{ int a = 2, b = 3, с = 5;

varParams(a, b, с);

Console.WriteLine("\na={0}, b={1}, c={2}", a, b, с);

}

Результат выполнения программы:

var[0]=4 var[1]=6 var[2] = 10

a = 2, b=3, c=5

Значения переменных a, b, с после их использования в качестве аргументов метода varParams() не изменились, хотя в теле метода элементы массива-параметра присвоены новые значения.

Соседние файлы в папке Lekc_C#