Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

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

У параметра с модификатором params "параметр: с модификатором params"

назначение особое – он представляет в методе список аргументов неопределённой

(заранее не фиксированной) длины. Его тип – одномерный массив с элементами

типа, указанного в спецификации параметра.

Как уже сказано, этот параметр может быть только последним (или

единственным) в списке параметров. В обращении к методу этот параметр

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

и элементы массива параметров. В теле метода отдельные реально использованные

аргументы представлены элементами массива-параметра. Количество аргументов

соответствует длине массива.

В качестве примера приведём программу с методом для вычисления значений

полинома Pn(x)=a0*xn+a1*xn-1+...+an-1*x+an:

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

using System;

class Program

{

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

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, a1. ..an-1, an. Все коэффициенты должны иметь

целочисленные значения. Их реальное количество, то есть степень полинома, при

обращении определяется числом использованных аргументов, а в теле метода –

значением поля coef.Length. В теле метода:

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

Для вычисления полинома использована схема Горнера, позволяющая

заменить явные возведения в степень последовательными умножениями:

Pn(x)=(...(a0*x+a1)*x+a2)*x+...+an-1)*x+an

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

параметров любых разных типов, Дж. Рихтер [10] предлагает использовать

параметр вида params Object[ ]. Он приводит в качестве примера метод, который

выводит обозначения (наименования) типов всех переданных методу аргументов.

Вот программа с этим методом:

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

using System;

class Program {

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

static void DisplayTypes(params Object[ ] objects) {

foreach (Object o in objects)

Console.WriteLine(o.GetType( ));

}

static void Main( ) {

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

}

}

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

System.String

System.Int32

System.Object

Обратим внимание, что параметр, снабжённый модификатором params,

обеспечивает передачу аргументов по значению "аргумент:передача аргументов по

значению" , т.е. значения аргументов после выполнения метода не изменяются.

Следующая программа иллюстрирует это правило.

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

using System;

class Program

{

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, c = 5;

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