Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5fan_ru_Уровни языков программирования. Язык C#...doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
352 Кб
Скачать
☆

Функции

.

Описание и использование функций

.

Возвращаемые значения

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

  • В описании функции вместо ключевого слова void указать тип возвращаемого значения.

  • По завершении всех вычислений в функции использовать ключевое слово return и передать возвращаемое значение вызывающей функции.

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

static <возвращаемыйТип> <имяФункции>()

{

. . .

return <возвращаемоеЗначение>;

}

Передача параметров

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

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

.

Передача параметров по ссылке и по значению

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

Это достаточно удобно, если мы не хотим, чтобы значение передаваемого параметра изменялось после вызова функции. Но если мы пожелаем, чтобы значение переменной myNumber было изменено, возникнет проблема.

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

Вместо этого следует передавать параметр по ссылке. Это означает, что функция будет работать именно с той переменной, которая использовалась при вызове функции, а не с переменной, которая имеет то же значение. Следовательно, любые изменения переменной, использованной внутри функции, отразятся на значении переменной, использовавшейся в качестве параметра. Для этого при описании параметра необходимо воспользоваться ключевым словом ref: Необходимо использовать заранее инициализированную переменную.

static void showDouble(ref int val)

{

val *= 2;

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

}

Вторично ключевое слово ref необходимо использовать при вызове функции (это обязательное требование, поскольку тот факт, что параметр передается по ссылке, является неотъемлемой частью описания этого параметра):

int myNumber = 5;

Console.WriteLine("До вызова функции myNumber = {0}", myNumber);

showDouble(ref myNumber);

Console.WriteLine("После вызова функции myNumber = {0}", myNumber);

В этом случае на консоль будет выведен следующий текст:

Выходные параметры

В дополнение к возможности передавать параметры по ссылке мы можем указать, что данный параметр является выходным: в описание такого параметра включается ключевое слово out, используемое так же, как и ключевое слово ref (в качестве модификатора параметра в описании функции и при вызове функции).

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

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