Программирование >>  Программирование с использованием ajax 

1 ... 41 42 43 [ 44 ] 45 46 47 ... 396


Соответствие параметров

При вызове функции параметры должны указываться в точности, как в определении функции, т.е. соответствующего типа, в соответствующем количестве и соответствующем порядке. Например, функцию

static void MyFunction(string myString, double myDouble)

нельзя вызывать так:

MyFunction(2.6, Hello );

Здесь в качестве первого параметра передается значение double, а в качестве второго - значение string, что не соответствует порядку, в котором эти параметры были указаны в определении функции.

Эту функцию также нельзя вызывать и следующим образом:

MyFunction( Hello ) ;

Здесь передается только один параметр string, а согласно определению функции, параметров должно быть два. При попытке использовать любой из двух приведенных выше вызовов функции компилятор будет сообщать об ошибке, вынуждая соблюдать соответствие сигнатурам применяемых функций.

Как уже говорилось, под сигнатурой подразумевается имя и параметры функции.

Что касается приведенной ранее в качестве примера функции MaxValue О , то она может использоваться только для получения максимального значения int в массиве значений int. В случае изменения кода в Main () следующим образом:

static void Main(string[] args) {

double[] myArray = {1.3, 8.9, 3.3, 6.5, 2.7, 5.3}; double maxVal = MaxValue(myArray);

Console.WriteLine( The maximum value in myArray is {0} , maxVal); Console.ReadKey0;

oh не будет компилироваться из-за того, что указан параметр не того типа. Чуть позже в разделе Перегрузка функций будет описан один полезный прием, обеспечивающий обходной путь для решения этой проблемы.

Массивы параметров

Язык С# позволяет указывать один (и только один) специальный параметр для функции. Этот параметр называется массивом параметров; он должен задаваться последним в определении функции. Массивы параметров позволяют вызывать функции с использованием различного количества параметров и определяются с помощью ключевого слова params.

Массивы параметров могут служить удобным способом для упрощения кода, поскольку их не нужно передавать из вызывающего кода. Вместо этого в них можно просто помещать несколько параметров одинаково типа и затем обращаться к ним из функции.

Код, который необходим для определения функции, использующей массив параметров, выглядит так:



static <возвращаемый тип> <имя функции> (<тип параметра1> <имя параметра1> , ... ,

params <тип>[] <имя>)

return <возвращаемый тип>;

Код, с помощью которого можно вызывать эту функцию, выглядит следующим образом:

<имя функции> ( <параметр1>, <значение1>, <значение2>, ...)

Здесь <значение 1>, <значение2> и т.д. представляют собой значения типа <тип>, которые используются для инициализации массива <имя>. Количество параметров, которые можно указывать здесь, практически бесконечно; единственным ограничением является то, что все они обязательно должны быть параметрами типа <тип>. Можно вообще не указывать никаких параметров.

Последнее свойство делает массивы параметров особенно полезными для предоставления функциям дополнительной информации, которая используется во время обработки. Например, предположим, что есть функция по имени GetWordO , которая принимает строку (значение 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. Теперь давайте рассмотрим полноценный пример. В следующем практическом занятии демонстрируется определение и использование функции с параметром params.

!.!JJ!! Обмен данными с функцией (часть 2)

1- Создайте новое консольное приложение по имени Ch06Ex03 и сохраните его в каталоге С:\BegVCSharp\Chapter06.

2. Добавьте файл Program.cs следующий код:

class Program {

static int SumVals (params int[] vals) {

int sxm = 0;

foreach (int val in vals) {

sum += val;

return sum;



static void Main(string [ ] args) {

int згш1= SijmVals(l, 5, 2, 9, 8) ;

Console.WriteLine( Suxmned Values = {0} , sum) ; вывод суммы значений Console.ReadKey();

3. Запустите приложение. На рис. 6.3 показан результат, который должен получиться.


Рис. 6.3. Приложение СЬОвЕхОЗ в действии

Описание полученных результатов

в этом примере функция SumVals () определяется с использованием ключевого слова params так, чтобы она могла принимать любое количество параметров типа int (и больше никаких других типов):

static int SumVals(params int[] vals)

Код в этой функции просто проходит по значениям в массиве vals и складывает их вместе, возвращая результат.

В Main О осуществляется вызов этой функции с пятью целочисленными параметрами:

int sum = SumVals (1, 5, 2, 9, 8) ;

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

Параметры-ссылки и параметры-значения

Во всех демонстрировавшихся до сих пор функциях использовались параметры-значения (value parameters). То есть при каждом применении параметров используемой внутри функции переменной передавалось значение. Никакие изменения, вносимые в эту переменную в функции, не оказывали влияние на параметр, передаваемый в вызове функции. Например, возьмем показанную ниже функцию, которая удваивает и отображает значение переданного ей параметра на экране:

static void ShowDouble(int val) {

val *= 2;

Console.WriteLine( удвоенное значение val = {0} , val);

Здесь видно, что в этой функции производится удваивание параметра val. Следовательно, в случае показанного ниже вызова этой функции:



1 ... 41 42 43 [ 44 ] 45 46 47 ... 396

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика