Операторы сложения — + и +=
Операторы + и += поддерживаются встроенными целыми числовыми типами и числовыми типами с плавающей запятой, а также строковым типом и типамиделегатов.
Объединение строк
Если один или оба операнда имеют тип string, оператор + сцепляет строковые представления этих операндов (строковое представление null является пустой строкой):
Console.WriteLine("Forgot" + "white space"); Console.WriteLine("Probably the oldest constant: " + Math.PI); Console.WriteLine(null + "Nothing to add."); // Output: // Forgotwhite space // Probably the oldest constant: 3.14159265358979 // Nothing to add.
Интерполяция строк предоставляет более удобный способ форматирования строк:
Console.WriteLine($"Probably the oldest constant: "); // Output: // Probably the oldest constant: 3.14
Начиная с C# 10, можно использовать интерполяцию строк для инициализации константной строки, если все выражения, используемые для заполнителей, также являются константными строками.
Начиная с C# 11 оператор + выполняет объединение строк для строк литеральных строк UTF-8. Этот оператор объединяет два ReadOnlySpan объекта.
Объединение делегатов
Для операндов того же типа delegate оператор + возвращает новый экземпляр делегата, при вызове которого вызывается сначала левый, а затем правый операнд. Если какой-либо из операндов имеет значение null , оператор + возвращает значение другого операнда (это тоже может быть null ). Следующий пример демонстрирует объединение делегатов с помощью оператора + :
Action a = () => Console.Write("a"); Action b = () => Console.Write("b"); Action ab = a + b; ab(); // output: ab
Для удаления делегатов используйте оператор — .
См. дополнительные сведения о типах делегатов.
Оператор присваивания сложения (+=)
Выражение, использующее оператор += , такое как
x += y
x = x + y
за исключением того, что x вычисляется только один раз.
В следующем примере иллюстрируется использование оператора += .
int i = 5; i += 9; Console.WriteLine(i); // Output: 14 string story = "Start. "; story += "End."; Console.WriteLine(story); // Output: Start. End. Action printer = () => Console.Write("a"); printer(); // output: a Console.WriteLine(); printer += () => Console.Write("b"); printer(); // output: ab
Можно также использовать оператор += , который позволяет указать метод обработчика событий при подписке на событие. Дополнительные сведения см. в разделе Практическое руководство. Подписка и отмена подписки на события.
Возможность перегрузки оператора
Определяемый пользователем тип может перегружать оператор + . При перегрузке бинарного оператора + неявно перегружается и соответствующий оператор += . Определяемый пользователем тип не может явно перегружать += оператор.
Спецификация языка C#
См. также
- справочник по C#
- Операторы и выражения C#
- Сцепка нескольких строк
- События
- Арифметические операторы
- Операторы — и -=
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Для чего нужен оператор
Оператор — это законченное предложение, записанное на каком-либо языке программирования. В нашем случае — на языке C#. Каждый оператор в программе на C# обязательно заканчивается символом ; (точка с запятой).
Операторы условно можно подразделить на две категории: исполняемые — с их помощью реализуется алгоритм решаемой задачи, и описательные , необходимые для определения типов пользователя и объявления объектов программы, например, переменных.
Классификация исполняемых операторов
Все исполняемые операторы можно разбить на две группы: простые и структурированные. К простым операторам можно отнести оператор присваивания, пустой оператор, операторы переходов ( goto , break , continue , return ), оператор-выражение, вызов метода как отдельного оператора.
Структурированные операторы — это сложные (составные) операторы, которые могут объединять в себе другие операторы. К этой категории относятся операторы ветвления if , выбора switch и операторы циклов ( for , while , do , foreach ).
Теперь более подробно рассмотрим простые операторы.
Оператор присваивания
Оператор присваивания — это самый употребительный оператор. Его назначение — присвоить новое значение какой-либо переменной. В C# имеется три формы этого оператора.
1) Простой оператор присваивания записывается так:
Данный оператор работает следующим образом: вначале вычисляется выражение, записанное справа от символа операции = (равно), затем полученный результат присваивается переменной, стоящей слева от знака = . Тип результата должен совпадать с типом переменной, записанной слева, или быть к нему приводимым.
Слева от знака = может быть только переменная, справа же можно записать и константу, и переменную и вообще выражение любой сложности.
2) Множественное присваивание — в таком операторе последовательно справа налево нескольким переменным присваивается одно и то же значение, например:
Так можно сразу определить, к примеру, что в равностороннем треугольнике все стороны равны одному и тому же числу 1 . Приведенный выше оператор эквивалентен последовательному выполнению трёх операторов:
Естественно, нам проще записать один оператор, а не три. Программа получается короче, более естественно смотрится текст, и работает такая конструкция немного быстрее.
3) Присваивание с одновременным выполнением какой-либо операции в общем виде записывается так:
переменная знак_операции = выражение;
и равносильно записи
переменная = переменная знак_операции выражение ;
s += 5; // 1-й вариант
делает то же самое, что и оператор
s = s + 5; // 2-й вариант
а именно: взять старое значение из переменной s , прибавить к нему число 5 и полученное значение снова записать в переменную s .
Как видим, запись 1-го варианта короче записи 2-го варианта, да и выполняется быстрее, так как в 1-м варианте адрес переменной s вычисляется 1 раз, а во 2-м варианте — дважды.
Оператор-выражение
В языке C# в ряде случаев выражение, которое заканчивается символом ; (точка с запятой), считается законченным предложением, т.е. оператором. Примеры:
1)Выполняется префиксная операция автоуменьшения:
2)Выполняется постфиксная операция автоувеличения:
3)Вызывается метод для вывода данных на дисплей монитора (выводится текст «Тест»):
А вот такой оператор на языке C# недопустим :
хотя в языках-предшественниках C и C++ он был возможен.
Пустой оператор
Пустой оператор — это оператор, который ничего не выполняет. Зачем нужен «бесполезный» оператор?
Пустой оператор используется в тех случаях, когда по синтаксису языка требуется записать какой-либо оператор, а по логике программы мы не собираемся что-либо делать. Так, пустой оператор может потребоваться в операторе ветвления, когда по какой-либо ветви ничего не требуется выполнять, так же для того, чтобы определить метку для перехода в тексте программы, а иногда — для пустого тела цикла.
Пустой оператор — это одиночный символ ; (точка с запятой), например:
Здесь первый символ ; (точка с запятой) завершает оператор присваивания, а второй символ как раз и даёт нам пустой оператор. В данной ситуации пустой оператор совсем не нужен (но и не является синтаксической ошибкой!), приведен только для пояснения. Более «разумные» примеры использования пустого оператора будут приведены позже в соответствующих темах.
Операторы перехода
Для изменения последовательного выполнения операторов используются операторы перехода. Это операторы goto , continue , break , return. Рассмотрим их подробнее.
Этот оператор позволяет сделать переход в пределах текущего метода. Переход возможен как по ходу выполнения программы, так и в обратном направлении. Пример:
Здесь Metka — это идентификатор (метка), обозначающий то место в тексте программы, куда делается переход. Такая метка не требует описания (её и нельзя описывать!), задается по общим правилам и не может совпадать ни с ключевыми словами, ни с именами объектов программы.
В языке C# этот оператор используется редко. Необдуманное применение goto приводит к затруднению понимания текста программы. Как правило, если в тексте программы требуется использование этого оператора, то это означает слабую логику в проектировании алгоритма программы.
Данный оператор применяется для выхода из операторов циклов ( for , while , do , foreach ) или оператора выбора switch . При использовании этого оператора метки не нужны, как как управление передаётся на оператор, следующий за оператором цикла или выбора.
Вот этот оператор в программах на C# применяется очень часто! А оператор switch вообще без break не используют. Примеры применения оператора break рассмотрим в соответствующих темах.
Позволяет передать управление в конец цикла. Применяется гораздо реже, чем оператор break . Как правило, всегда можно построить алгоритм решаемой задачи без использования оператора continue . Пример применения оператора continue рассмотрим в теме «Циклы».
Обеспечивает выход из метода. Управление передаётся оператору, следующему за вызовом метода. Примеры применения оператора return рассмотрим в темах, связанных с использованием методов.
Таблица операторов
Оператором называется знак или символ, указывающий на тип вычислений, которые выполняются в выражении. Существуют математические, логические операторы, а также операторы сравнения и ссылок. Access поддерживает различные операторы, включая арифметические операторы, такие как +, —, умножение (*) и деление (/), а также операторы для сравнения значений, текстовые операторы для сцепления текста и логические операторы для определения значений «Истина» и «Ложь». Эта статья содержит сведения об использовании таких операторов.
В этой статье
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Операторы объединения
- Специальные операторы
Арифметические операторы
Арифметические операторы используется для вычисления значения на основе нескольких чисел или изменения знака числа из положительного в отрицательный и наоборот.
Зачем нужен оператор ? при вызове метода? [дубликат]
А конкретно интересен оператор ‘?’ при вызове метода Invoke на событии. Зачем нужен данный оператор? Какую роль он выполняет если применяется подобным образом при вызове методов? Касательно этого куска кода, который некачественно вырезан из контекста, информация не интересна. Нужно общее предназначение оператора ‘?’.
Отслеживать
28.6k 22 22 золотых знака 61 61 серебряный знак 141 141 бронзовый знак
задан 18 июл 2018 в 8:53
Алексей Федотов Алексей Федотов
714 6 6 серебряных знаков 21 21 бронзовый знак
Синтактический сахар, чтобы не писать if(Boom != null) Boom.Invoke(this, EventArgs.Empty); . И оператор идет вместе с точкой ?. .
18 июл 2018 в 8:58
Вопрос не дубликат, а объяснение того же предмета с обратной стороны. ИМХО.
18 июл 2018 в 11:05
@Kromster Это и называется дубликат. Никто не говорит что этот вопрос плохой или не нужен, просто у этих вопросов общий пул ответов.
20 июл 2018 в 8:52
@vp_arth «Чем забивать гвозди? — молотком» и «Что забивать молотком? — гвозди». Вопросы хоть и с «общим пулом ответов», но все же разные (хотя и связанные).
20 июл 2018 в 8:57
Поэтому(вопросы разные, ответы нет) и существует механизм связывания таких вопросов — «закрытие как дубликата». Это отличается от «закрытия вопросов плохого качества».
20 июл 2018 в 9:07
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Начиная с C# 6.0 в языке появился оператор условного null (Null-Conditional Operator) или, как его нередко называют, элвис-оператор. Он позволяет упростить проверку на значение null в условных конструкциях.
И в данном примере, если Boom == null , вызов Invoke не произойдет. Если Boom != null , то вызов произойдет.
Общее предназначение оператора таково — если переменная, которая стоит перед ? , равна null , то вызов метода на этом объекте не произойдет.