При вызове функции ее параметры должны в точности соответствовать ее описанию. Необходимо совпадение типов параметров, их количества и порядка их следования. Это означает, что, например, функция:
В данном случае мы пытаемся передать значение типа double в качестве первого параметра, а значение типа string — в качестве второго, что не соответствует порядку, в котором эти параметры содержатся в описании функции. Нельзя использовать и такую строку:
myFunction(“Hello”);
поскольку в ней передается только один параметр типа string вместо двух обязательных параметров. Попытка воспользоваться любой из этих двух строк для вызова функции приведет к ошибке при компиляции, так как компилятор налагает требование точного соответствия сигнатурам вызываемых функций. Возвращаясь к предыдущему примеру, такое требование означает, что функция MaxValue() может использоваться только для получения максимального целого из массива целых чисел. Если мы изменим код в Main () следующим образом:
Console.WriteLine(“The maximum value in myArray is {0}”, maxVal) ;
}
то такой код не пройдет процедуру компиляции из-за неверного типа параметра.
В С# предусмотрена возможность задания одного (и только одного) специального параметра функции. Этот параметр, который обязательно должен располагаться последним, известен под названием массива параметров.Он позволяет при обращении к функциям использовать переменное количество параметров. Массив параметров описывается посредством ключевого слова params. Массивы параметров служат одним из способов упрощения кода, поскольку благодаря им не приходится передавать массивы из вызывающего кода. Напротив, можно передать несколько параметров одного и того же типа, которые помещаются в массив для последующего использования внутри функции.
При описании функции с массивом параметров применяется следующий код:
params <тип>[] <имя>)
{
return <возвращаемоеЗначение>
}
Для того чтобы вызвать эту функцию, потребуется следующий код:
В данном случае <значение1>, <значение2> и и т.д. значения типа <тип>.
Они используются для инициализации массива с именем <имя>. Никаких ограничений на количество параметров, которые могут быть здесь заданы, не существует; единственное предъявляемое к ним требование — они все должны быть одного типа <тип>. Можно вообще не задавать ни одного параметра. Эта последняя особенность делает массивы параметров полезными, в частности, при задании некоторой дополнительной информации, которая будет использоваться функцией. Например, допустим, что имеется функция getword(), которая принимает значение типа string в качестве первого параметра и возвращает первое слово из этой строки:
string firstWord = getWord(“This is a sentence.”);
Переменной firstWord будет присвоена строка “This”
Мы можем добавить в функцию getWord() параметр params, который позволит выбирать и возвращать другое слово по его индексу:
string firstWord = getWord(“This is a sentence.”, 2) ;
Если исходить из предположения, что нумерация слов начинается с 1, то в результате такого вызова переменной firstWord будет присвоена строка “is”.
Можно ограничить количество возвращаемых символов, введя третий параметр, что совершенно допустимо для параметра params:
string firstWord = getWord(“This is a sentence.”, 4, 3).;
В этом случае переменной firstWord будет присвоена строка “sen”.
Давайте разберем пример полностью.
{
static int sumVals(params int [] val)
{
int sum=0;
foreach (int val int vals)
{
sum += val;
}
return sum;
}
static void Main (string [] args)
{
int sum = sumValsd, 5, 2, 9, 8) ;
Console.WriteLine(“Summed Values = {0}”, sum);
}
}
В этом примере функция sumVals () описана с использованием ключевого слова params, что позволяет ей принимать произвольное количество параметров типа int(и никакого другого):