Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс_ред1 С#.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.8 Mб
Скачать

Функции

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

Однако оказывается, что такая структура кода весьма ограниченна. Довольно часто возникают ситуации, когда выполнение определенных задач — например, поиск максимального элемента массива — необходимо в различных местах программы. Конечно, можно размещать идентичные (или почти идентичные) участки кода в разных частях приложения каждый раз, когда в этом возникает необходимость, однако такой подход имеет свои недостатки. Изменение даже одной небольшой детали, касающейся выполнения общей задачи (например, исправление некоторой ошибки), потребует внесения изменений во многих местах, возможно, разбросанных по всему приложению, а размер таких приложений бывает очень большим.

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

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

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

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

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

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

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

Итак, рассмотрим пример программы:

using System;

namespace Function1

{

class Program

{

static void Write()

{

Console.WriteLine("Этот текст выведен функцией.");

}

static void Main(string[] args)

{

Write();

Console.ReadLine();

}

}

}

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

В данном случае описание функции состоит из:

  • Двух ключевых слов: static и void;

  • Имени функции, за которым располагаются параметры: Write();

  • Участка выполняемого кода, заключенного в фигурные скобки.

Начало описания функции Write() выглядит почти так же, как и начало главной функции приложения:

static void Main(string[] args)

Это объясняется тем, что весь код, который мы создавали до сих пор, представляет собой тоже часть функции. Эта единственная функция нашего приложения называлась Main(), и от других функций она отличается тем, что определяет точку входа в консольное приложение. Когда запускается приложение, написанное на С#, то происходит вызов содержащейся в нем функции точки входа, а когда эта функция заканчивает свою работу, выполнение приложения завершается. Любой выполняемый код, написанный на С#, должен иметь точку входа.

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

Как уже отмечено, обе функции — и Main(), и Write() — описываются с использованием ключевых слов static (статический) и void (отсутствующий).

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

Ключевое слово void, напротив, объяснить очень просто. Оно указывает, что функция не возвращает никакого значения. Далее в данном разделе рассматривается, что необходимо писать в тех случаях, когда у функции имеется возвращаемое значение.

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

Write();

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