Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_7.doc
Скачиваний:
3
Добавлен:
06.12.2018
Размер:
158.72 Кб
Скачать

Лабораторная работа №7

Тема: Модульное программирование. Разработка методов

Цель: Изучение приёмов разработки метов-функций и методов-процедур.

7.1 Теоретический материал

а) Методы как процедуры и функции

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

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

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

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

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

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

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

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

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

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

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

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

{тело_метода}

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

[доступ] void|тип_рез-та_функции имя_метода([список_формальных_парам])

<доступ> - спецификатор доступа, который определяет какой именно тип доступа разрешен к данному члену класса. Некоторые значения спецификаторов доступа представлены в таблице 11

Таблица 11 – Спецификаторы доступа

Спецификатор

Описание

1

public

Доступ к элементу не ограничен

2

protected

Доступ только из кода того же классе или из производного класса

3

internal

Доступ только из данной сборки

4

private

Доступ только из кода в том же классе

5

static

Одно поле для всех экземпляров класса

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

Например:

void A() {...};

int B(){...};

public void C(){...};

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

Классы, которые мы использовали до сих пор, содержали только один метод — Main ().

б) Параметры методов

Список формальных параметров

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

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

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

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

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

Например: Разработать методы для нахождения суммы кубов элементов массива.

class Program

{

// Нахождение суммы кубов

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);}

// Инициализация массива

static void Zn(params int[] M)

{for (int i=0;i<=M.Length-1;i++)

{Console.Write("{0}-й элемент равен: ",i);

M[i] = Int16.Parse(Console.ReadLine());

}

}

static void Main()

{

int[] D = new int[3];

Zn(D);

long Sum;

A(out Sum, D);

Console.WriteLine("S={0}", Sum);

Console.ReadKey();

}

}

}

По своему содержанию все параметры метода разделяются на три группы: входные, выходные и обновляемые. Входные параметры передают информацию методу, их значения в теле метода только читаются. Выходные параметры представляют собой результаты метода, они получают значения в ходе работы метода. Обновляемые параметры выполняют обе функции. Их значения используются в ходе вычислений и обновляются в результате работы метода. Выходные аргументы всегда должны сопровождаться ключевым словом out, обновляемые - ref. Входные аргументов, как правило, они задаются без ключевого слова, хотя иногда их полезно объявлять с параметром ref.

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

Пример : Разработать метод установления наибольшего из двух чисел.

class Program

{

static int Max(int a, int b)

{

if (a > b) return a;

else return b;

}

static void Main(string[] args)

{

Console.Write("a= "); int a = Int16.Parse(Console.ReadLine());

Console.Write("b= "); int b = Int16.Parse(Console.ReadLine());

int x=Max(a, b);

Console.WriteLine("наибольшее {0}", x);

}

}