Методы с переменным числом аргументов
Как уже сказано, этот параметр может быть только последним (или единственным) в списке параметров. В обращении к методу этот параметр заменяется списком аргументов, каждый из которых должен иметь тот же тип, что и элементы массива параметров. В теле метода отдельные реально использованные аргументы представлены элементами массива-параметра. Количество аргументов соответствует длине массива. В том… Читать ещё >
Методы с переменным числом аргументов (реферат, курсовая, диплом, контрольная)
У параметра с модификатором params назначение особое — он представляет в методе список аргументов неопределенной (заранее не фиксированной) длины. Его тип — одномерный массив с элементами типа, указанного в спецификации параметра.
С применением метода, имеющего параметр со спецификацией params string [], мы уже познакомились в гл. 8, где рассмотрели (параграф 8.10) возможности передачи в метод Main () аргументов из командной строки.
Как уже сказано, этот параметр может быть только последним (или единственным) в списке параметров. В обращении к методу этот параметр заменяется списком аргументов, каждый из которых должен иметь тот же тип, что и элементы массива параметров. В теле метода отдельные реально использованные аргументы представлены элементами массива-параметра. Количество аргументов соответствует длине массива.
В качестве примера объявления и использования метода с таким параметром приведем программу с методом для вычисления значений полинома.
// 0914.cs — массив-параметр
using System;
class Program.
{
// Вычисляет значение полинома с целыми коэффициентами: static double polynom (double х, 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));
} }
Результат выполнения программы:
Метод polynom () возвращает значение типа double, т. е. играет роль функции. Первый параметр double х представляет значение аргумента полинома. Второй параметр params int [] coef дает возможность передать в метод список коэффициентов полинома а0, аг, …, ап_г, ап. Все коэффициенты должны иметь целочисленные значения. Их реальное количество, т. е. степень полинома, при обращении определяется числом использованных аргументов, а в теле метода — значением свойства coef.Length. В теле метода:
coef[0]=a0, coef[l]=a1, coef[n]=an.
Для вычисления полинома использована схема Горнера, позволяющая заменить явные возведения в степень последовательными умножениями:
В том случае, когда требуется метод, принимающий произвольное число параметров любых разных типов, Дж. Рихтер [6] предлагает использовать параметр вида params object[]. Он приводит в качестве примера метод, который выводит обозначения (наименования) типов всех переданных методу аргументов. Вот программа с этим методом:
// 0915.cs — массив-параметр «универсального» типа using System; class Program {.
// Метод выводит названия типов аргументов: static void DisplayTypes (params object[] objects).
{
foreach (object о in objects).
Console.WriteLine (o.GetType ());
}
static void Main ().
{
DisplayTypes («yes», 432, new objectQ);
} }
Результат выполнения программы:
System.String System.Int32 System.object.
Обратим внимание, что параметр, снабженный модификатором params, обеспечивает передачу аргументов по значению, т. е. значения аргументов после выполнения метода не изменяются. Следующая программа иллюстрирует это правило.
// 0916.cs — переменное число аргументов using System; class Program {.
static void varParams (params int[] ar).
{
for (int i = 0; i < ar. Length; i++).
{
ar[i] *= 2;
Console.Write («ar[{0}]={l} «, i, ar[i]);
} }
static void Main ().
{
int a = 2, b = 3, c = 5; varParams (a, b, c);
Console.WriteLine («a={0}, b={l}, c={2}», a, b, c);
} }
Результат выполнения программы:
ar[0]=4 ar[l]=6 ar[2]=10.
a=2, b=3, c=5.
Значения переменных а, Ь, с после их использования в качестве аргументов метода varParams () не изменились, хотя в теле метода элементам массива-параметра присвоены новые значения.