Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
55
Добавлен:
29.02.2016
Размер:
565.25 Кб
Скачать

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

Иногда бывает удобно создать метод, в который можно передавать разное ко­личество аргументов. Язык С# предоставляет такую возможность с помощью ключевого слова params. Параметр, помеченный этим ключевым словом, раз­мещается в списке параметров последним и обозначает массив заданного типа неопределенной длины, например:

public int Calculate( int a, out int c, params int[] d ) ...

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

Листинг 1.15 - Метод с переменным числом параметров

using System;

namespace ConsoleApplication1

{ class Class1

{

public static double Average( params int [ ] a )

{

if ( a.Length == 0 )

throw new Exception( "Недостаточно аргументов в методе" );

double av = 0;

foreach ( int elem in a ) av += elem;

return av / a.Length;

}

static void Main()

{ try

{

Int [ ] a = { 10, 20, 30 };

Console.WriteLine( Average( a ) ); // 1

int [ ] b = { -11, -4, 12, 14, 32, -1, 28 };

Console.WriteLine( Average( b ) ): // 2

short z = 1, e = 13:

byte v = 107;

Console.WriteLine( Average( z, e, v ) ); // 3

Console.WriteLine( Average() ); // 4

}

catch( Exception e )

{

Console.WriteLineC e.Message );

return;

}

}

}

}

Результат работы программы:

20

10

38

Недостаточно аргументов в методе

В данном алгоритме отсутствие аргументов при вызове метода Average является ошибкой. Этот случай обрабатывается генерацией исключения. Если не обработать эту ошибку, результат вычисления среднего будет равен «не числу» (NaN) вследст- вие деления на ноль в операторе возврата из метода.

Параметр-массив может быть только один и должен располагаться последним в списке. Соответствующие ему аргументы должны иметь типы, для которых воз­можно неявное преобразование к типу массива.

7.4 Метод Main

Метод, которому передается управление после запуска программы, должен иметь имя Main и быть статическим. Он может принимать параметры из внешнего окру­жения ивозвращать значение в вызвавшую среду. Предусматривается два вари­анта методас параметрами и без параметров:

// без параметров:

static тип Main() { . . . }

static void Main() { . . . }

// с параметрами:

static тип Main( string[ ] args ) { /*. . .*/ }

static void Main( string[ ] args ) { /*. . .*/ }

Параметры, разделяемые пробелами, задаются при запуске программы из ко­мандной строки после имени исполняемого файла программы. Они передаются в массив args. Имя параметра в программе может быть любым, но принято использовать имяargs.

Если метод возвращает значение, оно должно быть целого типа, если не возвра­щает, он должен описываться как void. В этом случае оператор возврата изMain можно опускать, а вызвавшая среда автоматически получит нулевое значение, означающее успешное завершение. Ненулевое значение обычно означает аварий­ное завершение, например:

static int Main( string[] args )

{

. . .

if ( . . . /* все пропало */ ) return 1;

. . .

if ( . . . /* абсолютно все пропало */ ) return 100;

}

Возвращаемое значение анализируется в командном файле, из которого запускает­ся программа. Обычно это делается для того, чтобы можно было принять решение, выполнять ли командный файл дальше. В листинге 1.16 приводится пример мето­да Main, который выводит свои аргументы и ожидает нажатия любой клавиши.

Листинг 1.16 - Параметры метода Main

using System;

namespace ConsoleApplication1

{ class Class1

{ static void Main( string[ ] args )

{

foreach( string arg in args ) Console.WriteLine( arg );

Console.Read();

}

}

}

Пусть исполняемый файл программы имеет имя ConsoleApplication1.exe и вызы­вается из командной строки:

d:\cs\ConsoleApplicationl\bin\Debug\ConsoleApplicationl.exe one two three

Тогда на экран будет выведено:

one

two

three

Если параметр содержит специальные символы или пробелы, его заключают в ка­вычки.