Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
387.doc
Скачиваний:
11
Добавлен:
30.04.2022
Размер:
3.51 Mб
Скачать

Синтаксис методов

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

<заголовок_метода> {<тело_метода>}

Например:

void A() {...};

int B(){...);

public void C(){...};

Синтаксис заголовка метода:

[<атрибуты>][<модификаторы>] <типРезультатаФункции> <имя_метода> ([<списокФормАрг>])

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

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

Для различения методов очень часто используют такой термин как сигнатура метода. Всегда следует относиться внимательно к этому словосочетанию и рассматривать его в контексте. Сам термин «сигнатура» необходим для перегрузки (overload) и переопределения (override) методов.

В литературе есть различные трактовки сигнатуры. Например, сигнатура задает: возвращаемое значение метода и список формальных аргументов [5]; имя метода и список формальных аргументов [4]; параметры и возвращаемое значение функции [2].

В сигнатуру не входят имена формальных аргументов т.к. важны лишь их типы.

Формальные и фактические аргументы

Синтаксис объявления формального аргумента таков:

[ref | out | params] <типАргумента> <имяАргумента>

Обязательным является указание типа и имени аргумента.

Тип аргумента быть любым скалярным типом, массивом, классом, структурой, интерфейсом, перечислением, функциональным типом.

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

Оно задается 1 раз и указывается только для последнего аргумента списка, объявляемого как массив произвольного типа.

При вызове метода этому формальному аргументу соответствует произвольное число фактических аргументов.

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

- входные,

- выходные (out),

- обновляемые (ref).

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

Аргументы второй группы представляют собой результаты метода, они получают значения в ходе работы метода. Выходные аргументы всегда объявляться с ключевым словом out.

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

Аргументы ref более гибкие и объединяют оба действия. Обновляемые аргументы всегда должны сопровождаться ключевым словом ref.

Рассмотрим различные виды параметров на примере перегруженных методов. Перегруженные методы имеют одно и то же имя, но различаются списком параметров. Важно, что нельзя перегружать методы, различающиеся только возвращаемыми значениями. Методы имеют имя А() и рассчитывают сумму кубов произвольного числа аргументов.

static void A(out long p2, int p1)

{

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

Console.WriteLine("Метод A-1");

}

static void A(out long p2, params int[] p)

{

p2=0;

for(int i=0; i <p.Length; i++)

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

Console.WriteLine("Метод A-2");

}

static void A(out double p2, double p1)

{

p2 = Math.Pow(p1,3);

Console.WriteLine("Метод A-3");

}

static void A(out double p2, params double[] p)

{

p2=0;

for(int i=0; i <p.Length; i++)

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

Console.WriteLine("Метод A-4");

}

В примере все методы - процедуры. Первый аргумент у всех четырех перегруженных методов – выходной (записывается со словом out), в теле метода ему присваивается вычисленное значение.

2 метода используют ключевое слово params для последнего аргумента. При вызове этих методов указанному аргументу будет соответствовать несколько фактических аргументов, число которых может быть произвольным. Заранее можно сказать, что массивы – аргументы метода не обязательно снабжать словом params.

Если мы работаем с функцией, то в теле функции должен быть хотя бы один оператор, возвращающий значение функции: return (<Выражение>).

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

Если вызвать процедуру в выражении, то возникнет ошибка компиляции.

Вызов процедуры или функции имеет один и тот же синтаксис:

<имяМетода>([<списокФактическихАргументов>])

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

[ref | out] <выражение>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]