Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
387.doc
Скачиваний:
11
Добавлен:
30.04.2022
Размер:
3.51 Mб
Скачать

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

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

Если в первом списке n формальных аргументов, то фактических аргументов должно быть не меньше n (соответствие по числу).

Каждому i-му формальному аргументу ставится в соответствие i-й фактический аргумент.

Если последний формальный аргумент объявлен с ключевым словом params, то ему ставятся в соответствие все оставшиеся фактические аргументы (по порядку).

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

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

- допускает преобразование к типу T;

- совпадает c типом T или является его потомком.

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

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

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

Функции с побочным эффектом

Функция называется функцией с побочным эффектом, если помимо результата, вычисляемого функцией и возвращаемого ей в операторе return, она имеет выходные аргументы с ключевыми словами ref и out.

// Функция с побочным эффектом

static int f(ref int a)

{

return(a++);

}

static void Main(string[] args)

{

long p=1;

int[] p2={1, 2, 3};

int pin=3;

A(out p,pin);

Console.WriteLine(p);

A(out p, p2);

Console.WriteLine(p);

double pd, p3d=2;

double [] p4d={2,3,4};

A(out pd, p3d);

Console.WriteLine(pd);

A(out pd,p4d);

Console.WriteLine(pd);

f(ref pin);

Console.WriteLine(pin);

}

Хороший стиль объектно-ориентированного программирования не рекомендует использование таких функций.

Выражения, использующие функции с побочным эффектом, могут потерять свои прекрасные свойства, присущие им в математике. Если f(a) - функция с побочным эффектом, то a+f(a) может быть не равно f(a) +a, т.е. теряется коммутативность операции сложения.

Тест демонстрирует потерю коммутативности сложения при работе с такой функцией:

static int f(ref int a)

{ return(a++); }

static void TestSideEffect()

{

int a = 0, b=0, c=0;

a =1; b = a + f(ref a);

a =1; c = f(ref a)+ a;

Console.WriteLine("a={0}, b={1}, c={2}",a,b,c);

}

Рис. 18. Результаты работы метода с побочным эффектом

Функция Main()

Функция является точкой входа в приложение на C#.

Существуют 4 различные сигнатуры, которые можно использовать для Main()

static void Main()

static void Main(string[] args)

static int Main()

static int Main(string[] args)

args – получает параметры командной строки.

Чтобы задать аргументы командной строки, надо открыть окно Properties для приложения, выбрать страницу Configuration Properties/Debugging и в поле Command Line ввести через пробел аргументы.

Рис. 19. Определение аргументов командной строки

static void Main(string[] args)

{

Console.WriteLine("{0} аргументов в командной строке", args.Length);

foreach( string s in args)

Console.WriteLine(s);

}

Рис. 20. Вывод аргументов командной строки

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]