Рассмотрим более подробно, каким образом метод обменивается информацией с вызвавшим его кодом. При вызове метода выполняются следующие действия:
1. Вычисляются выражения, стоящие на месте аргументов.
2. Выделяется память под параметры метода в соответствии с их типом.
3. Каждому из параметров сопоставляется соответствующий аргумент (аргументы как бы накладываются на параметры и замещают их).
4. Выполняется тело метода.
5. Если метод возвращает значение, оно передается в точку вызова; если метод
имеет тип void, управление передается на оператор, следующий после вызова.
При этом проверяется соответствие типов аргументов и параметров и при необходимости выполняется их преобразование. При несоответствии типов выдается диагностическое сообщение. Листинг 5.3 иллюстрирует этот процесс.
Листинг 5.3. Передача параметров методу
using System;
namespace ConsoleApplication1
{
class Class1
{
static int Max(int a, int b)
// метод выбора максимального значения
{
if (а > b) return a;
else return b;
}
static void Main()
{
int a = 2, b = 4;
|
|
int x = Max(a, b); // вызов метода Max
Console.WriteLine(x); // результат: 4
short t1 = 3, t2 = 4;
int у = Max(t1, t2); // вызов метода Max
Console.WriteLine(у); // результат: 4
int z = Max(a + t1, t1 / 2 * b); // вызов метода Max
Console.WriteLine(z); // результат: 5
}
}
}
В классе описан метод Mах, который выбирает наибольшее из двух переданных ему значений. Параметры описаны как а и b. В методе Main выполняются три вызова Мах. В результате первого вызова методу Мах передаются два аргумента того же типа, что и параметры, во втором вызове — аргументы совместимого типа, в третьем — выражения.