Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабораторные / Лаб.раб.5С#.doc
Скачиваний:
93
Добавлен:
21.03.2015
Размер:
210.43 Кб
Скачать

Лабораторная работа № 5 Тема: Функции и процедуры в с#

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

Теоретические сведения Процедуры и функции - методы класса

Долгое время процедурыифункциииграли не только функциональную, но и архитектурную роль. Весьма популярным при построении программных систем был метод функциональной декомпозиции "сверху вниз", и сегодня еще играющий важную роль. Но с появлением ООП архитектурная роль функциональных модулей отошла на второй план. Для ОО-языков, к которым относится и язык C#, в роли архитектурного модуля выступаеткласс. Программная система строится из модулей, роль которых играютклассы, но каждый из этих модулей имеют содержательную начинку, задавая некоторую абстракцию данных.

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

В данном контексте понятие классраспространяется и на все его частные случаи - структуры, интерфейсы, делегаты.

В языке C# нет специальных ключевых слов - procedureиfunction, но присутствуют сами эти понятия. Синтаксис объявления метода позволяет однозначно определить, чем является метод -процедуройилифункцией.

Прежнюю роль библиотек процедурифункцийтеперь играютбиблиотеки классов.Библиотека классовFCL (статическая компонента Framework .Net.), доступная в языке C#, существенно расширяет возможности языка. Знаниеклассовэтойбиблиотекии методов этихклассовсовершенно необходимо для практического программирования на C# с использованием всей его мощи.

Процедуры и функции. Отличия

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

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

  • вызывается в выражениях.

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

  • возвращает формальный результат void, указывающий наотсутствие результата;

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

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

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

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

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

заголовок_метода

тело_метода

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

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

имя_метода([список_формальных_аргументов])

Имя метода и список формальных аргументов составляют сигнатуру метода. Заметьте, всигнатуруне входят имена формальных аргументов - здесь важны типы аргументов. Всигнатуруне входит и тип возвращаемого результата.

Квадратные скобки (метасимволы синтаксической формулы) показывают, что атрибуты и модификаторы могут быть опущены при описании метода. Подробное их рассмотрение будет дано в лекциях, посвященных описанию классов. Сейчас же упомяну только об одном из модификаторов - модификаторе доступа. У него четыре возможных значения, из которых пока рассмотрим только два -publicиprivate. Модификаторpublicпоказывает, чтометод открыти доступен для вызова клиентами и потомкамикласса. Модификаторprivateговорит, что метод предназначен для внутреннего использования вклассеи доступен для вызова только в теле методов самогокласса. Заметьте, если модификатор доступа опущен, то по умолчанию предполагается, что он имеет значениеprivateи метод являетсязакрытымдля клиентов и потомковкласса.

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

void A() {...};

int B(){...);

public void C(){...};

Методы AиBявляютсязакрытыми, а методС-открыт. МетодыAиСреализованыпроцедурами, а методB-функцией, возвращающей целое значение.

Соседние файлы в папке лабораторные