Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_пособие_ПЯВУ_C#+КР.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.87 Mб
Скачать

5.14. Подпрограммы

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

Подпрограммы бывают 2 видов: процедуры и функции.

Функция отличается от процедуры двумя особенностями:

  • всегда вычисляет некоторое (одно) значение, возвращаемое в качестве результата функции,

  • функция вызывается в выражениях.

Процедура в C# имеет свои особенности:

  • возвращает формальный результат void, который указывает на отсутствие результата, возвращаемого при вызове процедуры,

  • вызов процедуры является оператором языка,

  • имеет входные и выходные аргументы, причем выходных аргументов – ее результатов – может быть достаточно много.

Обычно метод реализуется в виде функции тогда, когда он имеет один выходной аргумент, рассматриваемый как результат вычисления функции (например, sin(0.5)).

В других случаях метод реализуют в виде процедуры.

Работа с подпрограммой включает 2 этапа:

– описание метода;

– вызов метода.

Вызов подпрограммы, то есть выполнение действий, заданных в ней в виде операторов, может быть произведён в некоторой точке программы посредством указания имени этой подпрограммы.

5.14.1. Описание методов (процедур и функций)

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

  • Описание заголовка

  • Описание тела метода.

Синтаксис заголовка процедуры:

[атрибуты] [модификаторы] {void} имя_процедуры ([список

параметров])

Синтаксис заголовка функции:

[атрибуты] [модификаторы] {тип результата функции} имя_функции

([параметры])

имя_метода ([список параметров]) составляют сигнатуру метода и является обязательная часть в заголовке метода

[ ] показывают, что атрибуты и модификаторы могут быть опущены при описании метода.

При работе с подпрограммой используются модификаторы:

static – представляет стандартный поток для консольного приложения,

public – показывает, что метод открыт и доступен для вызова пользователем и потомками класса,

private – говорит, что метод закрыт и предназначен для внутреннего использования в классе и доступен для вызова только в теле методов самого класса.

Если модификатор опущен, то метод является закрытым для пользователя и класса.

Примеры описания методов:

void A() {…};

int B() {…};

public void C() {…};

Они означают, что методы А и В являются закрытыми, а метод С – открыт. Методы А и С реализованы процедурами, а метод B – функцией, возвращающей целое значение (int), {…} – тело метода.

5.14 2. Формальные и фактические параметры

Формальные параметры (или просто параметры) – это данные, с которыми работает подпрограмма. Параметры перечисляются в заголовке подпрограммы в определённой последовательности и с указанием типов.

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

Синтаксис объявления двух параметров:

[ ref | out | params] тип_аргумента1 имя_аргумента1,

тип_аргумента2 имя_аргумента2;

Например: (out long p1, int p2);

Параметры связаны с аргументами. Аргументы – данные, передаваемые в подпрограмму или возвращаемые из нее. Это внешние для подпрограммы данные, с которыми имеет дело вызывающая часть программы. В подпрограмме им соответствуют параметры. Указываются в списке аргументов при обращении к подпрограмме и являются фактическими параметрами.

Можно для фиксированного числа формальных параметров передать методу произвольное число фактических аргументов. Для этого в списке формальных параметров необходимо задать ключевое слово params. Оно может появляться в объявлении лишь последнего аргумента списка, объявленного как массив произвольного типа. При вызове метода этому параметру соответствует произвольное число фактических аргументов.

Для аргументов и параметров необходимо соблюдать:

  • одинаковое количество;

  • одинаковый порядок следования;

  • совместимость типов;

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

Все формальные параметры разделяются на 3 группы:

  • входные параметры – задаются без ключевого слова (или с параметром ref); передают информацию методу и их значения в теле метода только читаются;

  • выходные параметры – снабжаются ключевым словом out; представляют собой результаты метода, они получают значения в ходе работы метода; в теле метода должен присутствовать оператор присваивания, задающий значение этому параметру;

  • обновляемые параметры – снабжаются ключевым словом ref; выполняют обе функции. Их значения используются в ходе вычислений и обновляются в результате работы метода.

Например:

// Процедура Cube

void Cube(out long p2, int p1)

{

p2 = (long)Math.Pow(p1, 3);

Console.WriteLine(“Метод 1”);

}

// Процедура CubeM

void CubeM(out double p2, params double[ ] p)

{

p2 =0; for (int I = 0; I < p.lehgth; i++)

p2 + = Math.Pow(p[ i ], 3);

Console.WriteLine(“Метод 2”);

}

// Функция F

int F(ref int a)

{

retun (a++)

}

Все методы закрыты, поскольку объявлены без модификатора доступа. Cube и CubeM – процедуры, а F – функция. Аргумент р2 – является выходным (сопровождается ключевым словом out ), поэтому в теле метода ему присваивается значение. Аргумент функции F является обновляемым (снабжен ключевым словом ref ), в теле функции используется его значение для получения результата функции, но и само значение параметра изменяется в теле функции. Для процедуры CubeM используется ключевое слово params для самого последнего аргумента р. Т.к. этому параметру будет соответствовать несколько фактических аргументов, число которых может быть произвольным.