Тело метода
Синтаксически тело метода является блоком, который представляет собой последовательность операторов и описаний переменных, заключенную в фигурные скобки. Если речь идет о теле функции, то в блоке должен быть хотя бы один оператор перехода, возвращающий значение функции в форме
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();
}
}
}