Переменные
Чему вы научитесь:
- объявлять переменные и константы, задавать им значения и менять значения переменных;
- объяснять, почему после
b = aиa = 7вbостаётся старое значение; - различать встроенные типы
int,long,double,decimal,bool,charиstring; - переводить значения из одного типа в другой: приведением и методами
int.ParseиConvert.ToInt32.

Представьте коробку с наклейкой. На наклейке написано имя, а внутри лежит значение. По имени коробку можно найти, заглянуть в неё или положить туда что-то другое. Программа хранит данные так же — в переменных: у каждой есть имя и значение, которое можно прочитать и заменить.
У коробки есть ещё и форма. В коробку для целых чисел текст не положить, а в коробку для текста — число. Форму коробки в C# называют типом, и её выбирают сразу, когда коробку заводят.
Зачем нужны имена? Имя пользователя, его возраст, счёт в игре — каждое такое значение программа использует в нескольких местах. Если дать значению имя, его можно напечатать, заменить и напечатать снова:
string name = "Anna";
int age = 30;
Console.WriteLine(name); // Anna
Console.WriteLine(age); // 30
age = 31;
Console.WriteLine(age); // 31Давайте разберём пример по строкам:
string name = "Anna";заводит коробкуnameдля текста и кладёт в неё строку"Anna".int age = 30;заводит коробкуageдля целых чисел и кладёт в неё30.Console.WriteLine(name)печатает не словоname, а то, что лежит в коробке:Anna.Console.WriteLine(age)печатает30.age = 31;кладёт вageновое значение, и старое30пропадает.- Последняя строка печатает
31.
Объявление
Строка int age = 30; объявляет переменную: сообщает компилятору её тип и имя. Разберём эту строку по частям:
int— тип: вageможно хранить только целые числа;age— имя переменной;= 30— начальное значение;;— конец инструкции.
Начальное значение можно не указывать и положить его позже, отдельной строкой:
int score;
score = 10;
Console.WriteLine(score); // 10Объявить переменную нужно до первого использования, выше по тексту программы. Если объявления нет совсем, строку score = 10; компилятор не примет: имени score он не знает и сообщит об ошибке CS0103.
Имена переменных
Имя переменной подчиняется трём правилам:
- имя начинается с буквы или знака
_, дальше идут буквы, цифры и_; - регистр букв важен:
ageиAge— две разные переменные; - ключевое слово языка, например
int, не может быть именем: за ним в C# уже закреплён смысл.
Кроме правил, есть соглашение, принятое в .NET. Составные имена переменных пишут слитно и начинают каждое слово после первого с заглавной буквы: itemCount, maxSpeed.
Присваивание
Знак = выполняет присваивание: берёт значение справа и кладёт его в переменную слева. Что происходит, когда справа стоит другая переменная?
int a = 5;
int b = a;
a = 7;
Console.WriteLine(a); // 7
Console.WriteLine(b); // 5Разберём по шагам:
int a = 5;кладёт5в коробкуa.int b = a;заводит коробкуbи кладёт в неё копию значения изa, то есть тоже5.a = 7;меняет только коробкуa.- Программа печатает
7и5: вbлежит своя копия, и новое значениеaеё не задело.
Присваивание не связывает b с a. Оно копирует значение, которое лежит в a в эту секунду, и дальше переменные живут отдельно.
Нажимайте «Следующий шаг» и следите за b: после строки a = 7 её значение остаётся прежним.
1int a = 5;2int b = a;3Console.WriteLine(a);4Console.WriteLine(b);5a = 7;6Console.WriteLine(a);7Console.WriteLine(b);8b = 9;9Console.WriteLine(a);10Console.WriteLine(b);
int a = 5 заводит коробку a и кладёт в неё 5.
Здесь аналогия с коробками перестаёт работать. Настоящую вещь нельзя положить в две коробки сразу: переложите её — и первая коробка опустеет. Присваивание ничего не перекладывает, а копирует: после b = a в обеих коробках лежит по своей пятёрке, и a не пустеет.
Этот вопрос часто задают на собеседовании: изменится ли b, если после b = a поменять a? Для int ответ — нет: присваивание скопировало само число.
Частая ошибка
Переменную объявили, а значение положить забыли:
int total;
Console.WriteLine(total); // ✗error CS0165: Use of unassigned local variable 'total'Программа не компилируется. Компилятор следит, чтобы переменная получила значение раньше, чем её прочитают: в пустой коробке смотреть не на что. Задайте начальное значение при объявлении: int total = 0;.
Главное
- Переменная — коробка с именем и значением; её тип задаётся при объявлении:
int age = 30;. =кладёт значение справа в переменную слева, а старое значение пропадает.b = aкопирует значение: дальшеaиbменяются независимо.- Читать переменную можно только после того, как в неё положили значение.