Упражнение. Выполнение добавления с неявным преобразованием данных
Часто требуется выполнять математические операции с числовыми данными. Вы начнете с добавления в этом уроке и развернитесь к другим операциям в следующем уроке, так как есть важный урок, чтобы узнать, как компилятор C# анализирует и интерпретирует код.
Сложение двух числовых значений
Чтобы добавить два числа вместе, вы будете использовать оператор сложения, который является символом +
плюса. Обратите внимание, что для сложения используется тот же символ плюса +
, что и для объединения строк. Применение одного символа для выполнения нескольких разных операций называется "перегрузкой оператора" и достаточно распространено в языке C#.
В этом случае компилятор C# самостоятельно определяет, какую именно операцию вы хотите выполнить. Компилятор анализирует код и устанавливает, что +
(оператор) стоит между двумя числовыми значениями (операндами). Учитывая типы данных переменных (обе имеют тип int
), он понимает, что необходимо сложить эти два значения.
Введите следующий код в редактор .NET:
int firstNumber = 12; int secondNumber = 7; Console.WriteLine(firstNumber + secondNumber);
Запустите код, и вы увидите следующий результат в выходной консоли:
19
Применение разных типов данных для принудительного выполнения неявного преобразования типов
Что произойдет, если вы пытаетесь использовать +
символ с обоими string
и int
значениями?
Измените написанный код, чтобы он соответствовал следующему коду:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
Запустите код, и вы увидите следующий результат в выходной консоли:
Bob sold 7 widgets.
В этом случае компилятор C# понимает, что вы хотите использовать +
символ для объединения двух операндов. Такой вывод связан с тем, что символ +
используется между операндами типов string
и int
. Соответственно, компилятор пытается на временной основе неявно преобразовать переменную widgetsSold
типа int
в тип string
, чтобы обеспечить возможность ее объединения с остальной частью строки. Компилятор C# в большинстве ситуаций устанавливает необходимость преобразования автоматически, однако в идеальном случае ваши намерения должны быть изначально определены явно.
Знакомство с более сложными случаями сложения чисел и объединения строк
Измените написанный код, чтобы он соответствовал следующему коду:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
Запустите код, и вы увидите следующий результат в выходной консоли:
Bob sold 77 widgets.
Вместо сложения переменной widgetsSold
типа int
с литералом 7
типа int
компилятор обрабатывает оба значения как строковые и объединяет их.
Добавьте скобки для уточнения намерения компилятора
Измените написанный код, чтобы он соответствовал следующему коду:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
Запустите код, и вы увидите следующий результат в выходной консоли:
Bob sold 14 widgets.
Символы круглых скобок ()
выступают в качестве перегруженного оператора. В этом случае открывающая и закрывающая круглые скобки используются в качестве оператора, определяющего порядок выполнения операций, по аналогии с математической формулой. Вы указываете, что необходимо, чтобы внутренние круглые скобки разрешались в первую очередь, что привело к добавлению значений int
widgetsSold
и значению 7
. После вычисления этого выражения выполняется неявное преобразование результата в строковое значение, которое затем объединяется с оставшейся частью сообщения.
Примечание.
Как правило, не следует выполнять операции вычисления и объединения в одной строке кода. Этот пример позволяет понять, каким образом компилятор интерпретирует операторы и операнды.
Кратко
Вот что вы узнали до сих пор о математических операциях в C#:
- Вы можете выполнять математические операции с числами, например складывать их.
- Для выполнения операций объединения и сложения используется символ плюса
+
. Такой способ называется перегрузкой оператора и подразумевает определение выполняемой операции самим компилятором на основании типов обрабатываемых данных. - Если очевидно, что разработчик пытается объединить строковые представления чисел для отображения, компилятор C# неявно преобразует значение типа
int
вstring
. - Используйте скобки, чтобы определить порядок операций, чтобы явно сообщить компилятору, что необходимо выполнить определенные операции перед другими операциями.