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

Тело метода

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

return [выражение];

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

Вызов метода: синтаксис

Как уже отмечалось, метод может вызываться в выражениях или быть вызван как оператор. В качестве оператора может использоваться любой метод - как процедура, так и функция. Функцию разумно вызывать как оператор, только если она обладает побочным эффектом (т.е. помимо основного результата, содержит ещё и изменяемые параметры). В последнем случае она вызывается ради своего побочного эффекта, а возвращаемое значение никак не используется.

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

Сам вызов метода, независимо от того, процедура это или функция, имеет один и тот же синтаксис:

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

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

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

Пример: Разработать методы для определения площади треугольника по известным высоте и основанию и по известным трём сторонам. Найти площадь треугольника

class Program

{

//площадь треугольника по основанию и высоте

static double S_tr()

{ Console.Write("Длина основания: ");

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

Console.Write("Длина высоты: ");

int h=Int16.Parse(Console.ReadLine());

double s = 0.5 * a * h;

return s;

}

//Вывод площади

static void Wywod(double A)

{Console.WriteLine("Площадь треугольника равна {0}",A);}

///Ввод сторон

static void Wwod_storon(out int a, out int b, out int c)

{ Console.Write("Длина стороны а: ");

a = Int16.Parse(Console.ReadLine());

Console.Write("Длина стороны b: ");

b = Int16.Parse(Console.ReadLine());

Console.Write("Длина стороны c: ");

c = Int16.Parse(Console.ReadLine());

}

//площадь треуг по трём сторонам

static void S_tr(ref double s, int a, int b, int c)

{ double pp=(a+b+c)*0.5;

s = Math.Sqrt(pp * (pp - a) * (pp - b) * (pp - c));

Wywod(s);

}

//основная программа

static void Main()

{

int a, b, c;

double s=0;

Console.Write("Найдём площ треугольника \n 1 - по основанию и высоте \n 2 - по трём сторонам \n Ваш выбор: ");

string vybor=Console.ReadLine();

if (vybor=="1") {double Plo=S_tr(); Wywod(Plo);}

else { Wwod_storon(out a, out b, out c); S_tr(ref s, a, b, c); }

Console.ReadKey();

}

}

}