Упражнение. Выполнение добавления с неявным преобразованием данных

Завершено

Часто требуется выполнять математические операции с числовыми данными. Вы начнете с добавления в этом уроке и развернитесь к другим операциям в следующем уроке, так как есть важный урок, чтобы узнать, как компилятор C# анализирует и интерпретирует код.

Сложение двух числовых значений

Чтобы добавить два числа вместе, вы будете использовать оператор сложения, который является символом +плюса. Обратите внимание, что для сложения используется тот же символ плюса +, что и для объединения строк. Применение одного символа для выполнения нескольких разных операций называется "перегрузкой оператора" и достаточно распространено в языке C#.

В этом случае компилятор C# самостоятельно определяет, какую именно операцию вы хотите выполнить. Компилятор анализирует код и устанавливает, что + (оператор) стоит между двумя числовыми значениями (операндами). Учитывая типы данных переменных (обе имеют тип int), он понимает, что необходимо сложить эти два значения.

  1. Введите следующий код в редактор .NET:

    int firstNumber = 12;
    int secondNumber = 7;
    Console.WriteLine(firstNumber + secondNumber);
    
  2. Запустите код, и вы увидите следующий результат в выходной консоли:

    19
    

Применение разных типов данных для принудительного выполнения неявного преобразования типов

Что произойдет, если вы пытаетесь использовать + символ с обоими string и int значениями?

  1. Измените написанный код, чтобы он соответствовал следующему коду:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
    
  2. Запустите код, и вы увидите следующий результат в выходной консоли:

    Bob sold 7 widgets.
    

В этом случае компилятор C# понимает, что вы хотите использовать + символ для объединения двух операндов. Такой вывод связан с тем, что символ + используется между операндами типов string и int. Соответственно, компилятор пытается на временной основе неявно преобразовать переменную widgetsSold типа int в тип string, чтобы обеспечить возможность ее объединения с остальной частью строки. Компилятор C# в большинстве ситуаций устанавливает необходимость преобразования автоматически, однако в идеальном случае ваши намерения должны быть изначально определены явно.

Знакомство с более сложными случаями сложения чисел и объединения строк

  1. Измените написанный код, чтобы он соответствовал следующему коду:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
    
  2. Запустите код, и вы увидите следующий результат в выходной консоли:

    Bob sold 77 widgets.
    

Вместо сложения переменной widgetsSold типа int с литералом 7 типа int компилятор обрабатывает оба значения как строковые и объединяет их.

Добавьте скобки для уточнения намерения компилятора

  1. Измените написанный код, чтобы он соответствовал следующему коду:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
    
  2. Запустите код, и вы увидите следующий результат в выходной консоли:

    Bob sold 14 widgets.
    

Символы круглых скобок () выступают в качестве перегруженного оператора. В этом случае открывающая и закрывающая круглые скобки используются в качестве оператора, определяющего порядок выполнения операций, по аналогии с математической формулой. Вы указываете, что необходимо, чтобы внутренние круглые скобки разрешались в первую очередь, что привело к добавлению значений intwidgetsSold и значению 7. После вычисления этого выражения выполняется неявное преобразование результата в строковое значение, которое затем объединяется с оставшейся частью сообщения.

Примечание.

Как правило, не следует выполнять операции вычисления и объединения в одной строке кода. Этот пример позволяет понять, каким образом компилятор интерпретирует операторы и операнды.

Кратко

Вот что вы узнали до сих пор о математических операциях в C#:

  • Вы можете выполнять математические операции с числами, например складывать их.
  • Для выполнения операций объединения и сложения используется символ плюса +. Такой способ называется перегрузкой оператора и подразумевает определение выполняемой операции самим компилятором на основании типов обрабатываемых данных.
  • Если очевидно, что разработчик пытается объединить строковые представления чисел для отображения, компилятор C# неявно преобразует значение типа int в string.
  • Используйте скобки, чтобы определить порядок операций, чтобы явно сообщить компилятору, что необходимо выполнить определенные операции перед другими операциями.