Совпадение имени с параметром в C#
Параметр локальной функции - локальная переменная
на время вызова. Имя параметра попадает
во внутреннюю область функции. Если снаружи
уже объявлена локальная переменная с тем же
именем, компилятор выдает ошибку CS0136:
имя занято во внешней области и не может
быть объявлено снова во вложенной.
Ошибочный код:
int num = 1;
void Show(int num) { // error
Console.WriteLine(num);
}
Программа не собирается: параметр num
конфликтует с внешней num. Исправление -
разные имена у внешней переменной и параметра:
int num = 1;
void Show(int value) {
Console.WriteLine(value); // prints 1
}
Show(num);
Изменение параметра по-прежнему не меняет внешнюю переменную - работает копия значения:
int num = 1;
void Show(int value) {
value = 2;
}
Show(num);
Console.WriteLine(num); // prints 1
Если параметр не нужен, локальная функция
без параметров может читать и менять внешнюю
num через захват, но не объявить
внутри вторую num:
int num = 1;
void Show() {
num = 2;
}
Show();
Console.WriteLine(num); // prints 2
Определите, соберется ли программа:
int score = 10;
void Print(int score) {
Console.WriteLine(score);
}
Print(score);
Исправьте код: внешняя переменная должна
остаться total, параметр назовите
по-другому и выведите переданное значение:
int total = 5;
void Show(int total) {
Console.WriteLine(total);
}
Show(total);
Определите, соберется ли программа:
int num = 1;
void Show() {
int num = 2;
}
Show();
Console.WriteLine(num);