
- •Лабораторная работа № 5 Тема: Функции и процедуры в с#
- •Теоретические сведения Процедуры и функции - методы класса
- •Процедуры и функции. Отличия
- •Описание методов (процедур и функций). Синтаксис
- •Список формальных аргументов
- •Тело метода
- •Вызов метода. Синтаксис
- •Вызов метода. Семантика
- •Почему у методов мало аргументов?
- •Поля класса или функции без аргументов?
- •Пример: класс Account
- •Функции с побочным эффектом
- •Оператор return
- •Рекурсия
- •Процедуры и массивы
- •Задача №1
- •Задача №2
- •Задача №3
- •Задача №4
- •3. Содержание отчета.
- •4. Вопросы для защиты по лабораторной работе:
Тело метода
Синтаксически тело метода является блоком, который представляет собой последовательность операторов и описаний переменных, заключенную в фигурные скобки. Если речь идет о телефункции, то вблокедолжен быть хотя бы один оператор перехода, возвращающий значениефункциив формеreturn (выражение).
Переменные, описанные в блоке, считаются локализованными в этомблоке. В записи операторовблокаучаствуют имена локальных переменныхблока, имена полей класса и имена аргументов метода.
Вызов метода. Синтаксис
Метод может вызываться в выражениях или быть вызван как оператор. В качестве оператора может использоваться любой метод - как процедура, так ифункция. Конечно,функциюразумно вызывать как оператор, только если она обладает побочным эффектом. В последнем случае она вызывается ради своего побочного эффекта, а возвращаемое значение никак не используется. Подобную роль играет использование некоторых выражений с побочным эффектом в роли оператора, классическим примером является операторx++;.
Если же попытаться вызвать процедурув выражении, то это приведет к ошибке еще на этапе компиляции. Возвращаемоепроцедуройзначениеvoidнесовместимо с выражениями. Так что в выражениях могут быть вызваны толькофункции.
Сам вызов метода, независимо от того,процедураэто илифункция, имеет один и тот же синтаксис:
имя_метода([список_фактических_аргументов])
Если это оператор, то вызов завершается точкой с запятой. Формальный аргумент, задаваемый при описании метода - это всегда имя аргумента (идентификатор). Фактический аргумент - это выражение, значительно более сложная синтаксическая конструкция. Вот точный синтаксис фактического аргумента:
[ref|out]выражение
Между списком формальных и списком фактических аргументов должно выполняться определенное соответствиепо числу, порядку следования, типу и статусу аргументов. Если в первом спискеnформальных аргументов, то фактических аргументов должно быть не меньшеn(соответствиепо числу). Каждомуi-му формальному аргументу (для всехiот1доn-1) ставится всоответствиеi-й фактический аргумент. Последнему формальному аргументу, при условии, что он объявлен с ключевым словомparams, ставятся всоответствиевсе оставшиеся фактические аргументы (соответствиепо порядку).Если формальный аргумент объявлен с ключевым словом ref или out, то фактический аргумент должен сопровождаться таким же ключевым словом в точке вызова (соответствие по статусу).
Появление ключевых слов при вызове методов- это особенность языка C#, отличающая его от большинства других языков. Он направлен на повышение надежности программной системы, напоминая программисту о том, что данный фактический аргумент являетсявыходными значение его наверняка изменится послевызова метода. Если формальный аргумент объявлен с типомT, то выражение, задающее фактический аргумент, должно быть согласовано по типу с типомT: допускает преобразование к типуT, совпадает c типомTили является его потомком (соответствиепо типу).
Если формальный аргумент является выходным- объявлен с ключевым словомrefилиout, - то соответствующий фактический аргумент не может быть выражением, поскольку используется в левой части оператора присваивания; следовательно, он должен быть именем, которому можно присвоить значение.