Операторы и выражения C# (справочник по C#)
C# предоставляет ряд операторов. Многие из них поддерживаются встроенными типами и позволяют выполнять базовые операции со значениями этих типов. В число этих операторов входят следующие группы:
-
, выполняющие арифметические операции с числовыми операндами. , сравнивающие числовые операнды. , выполняющие логические операции с операндами bool . выполняют битовые операции или операции сдвига с операндами целочисленных типов. проверяют равенство или неравенство своих операндов.
Как правило, можно выполнить перегрузку этих операторов, то есть указать поведение оператора для операндов определяемого пользователем типа.
Простейшими выражениями C# являются литералы (например, целые и реальные числа) и имена переменных. Их можно объединить в сложные выражения с помощью операторов. Приоритет и ассоциативность операторов определяют порядок выполнения операций в выражении. Порядок вычисления, определяемый приоритетом и ассоциативностью операторов, можно изменить с помощью скобок.
В следующем коде примеры выражений находятся в правой части назначений:
Как правило, выражение выдает результат и может быть заключено в другое выражение. Вызов метода void является примером выражения, которое дает результат. Его можно использовать только в качестве оператора, как показано в следующем примере:
Ниже приведены некоторые другие виды выражений, доступные в C#:
Выражения интерполированных строк, которые предоставляют удобный синтаксис для создания форматированных строк:
Лямбда-выражения, позволяющие создавать анонимные функции:
Выражения запроса, позволяющие использовать возможности запросов непосредственно в C#:
Определение тела выражения можно использовать, чтобы предоставить краткое определение для метода, конструктора, свойства, индексатора или метода завершения.
Приоритет операторов
В выражении с несколькими операторами операторы с более высоким приоритетом оцениваются до операторов с более низким приоритетом. В следующем примере умножение выполняется сначала, так как оно имеет более высокий приоритет, чем сложение:
Используйте скобки, чтобы изменить порядок вычисления, накладываемый приоритетом операторов:
В следующей таблице перечислены операторы C# в порядке убывания приоритета. Операторы в каждой строке имеют одинаковый приоритет.
Ассоциативность операторов
Если операторы имеют одинаковый приоритет, порядок их выполнения определяется ассоциативностью операторов:
- Операторы с левой ассоциативностью вычисляются слева направо. За исключением операторов присваивания и оператора объединения со значением NULL, все бинарные операторы имеют левую ассоциативность. Например, выражение a + b — c вычисляется как (a + b) — c .
- Операторы с правой ассоциативностью вычисляются справа налево. Операторы присваивания, операторы объединения null, лямбда-выражения и условные операторы ?: являются правильными ассоциативными. Например, выражение x = y = z вычисляется как x = (y = z) .
Используйте скобки, чтобы изменить порядок вычисления, накладываемый ассоциативностью операторов:
Вычисление операнда
Не связанные с приоритетом и ассоциативностью операторов операнды в выражении вычисляются слева направо. В следующих примерах иллюстрируется порядок вычисления операторов и операндов:
| Выражение | Порядок вычислений |
|---|---|
| a + b | a, b, + |
| a + b * c | a, b, c, *, + |
| a / b + c * d | a, b, /, c, d, *, + |
| a / (b + c) * d | a, b, c, +, /, d, * |
Как правило, оцениваются все операнды операторов. Однако некоторые операторы оценивают операнды условно. То есть значение крайнего левого операнда такого оператора определяет, следует ли оценивать другие операнды. Эти операторы являются условными логическими операторами И ( && ) и ИЛИ ( || ) , операторами объединения со значением NULL ?? и ??= , условными операторами со значением NULL ?. и ?[] и условным оператором ?: . Дополнительные сведения см. в описании каждого оператора.
Спецификация языка C#
Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:
C# — Операторы
Оператор — это символ, который сообщает компилятору выполнить определенные математические или логические манипуляции. C # имеет богатый набор встроенных операторов и предоставляет следующие типы операторов:
- Арифметические операторы
- Реляционные операторы
- Логические операторы
- Побитовые операторы
- Операторы присваивания
- Другие операторы
В этом учебном пособии поочередно описываются арифметические, реляционные, логические, побитовые, присваивающие и другие операторы.
Арифметические операторы
В следующей таблице показаны все арифметические операторы, поддерживаемые C #. Предположим, что переменная A содержит 10, а переменная B имеет 20, тогда —
| Оператор | Описание | Пример |
|---|---|---|
| + | Добавляет два операнда | A + B = 30 |
| — | Вычитает второй операнд с первого | A — B = -10 |
| * | Умножает оба операнда | A * B = 200 |
| / | Делит числитель на де-числитель | B / A = 2 |
| % | Оператор модуля и остаток после целочисленного деления | B% A = 0 |
| ++ | Оператор приращения увеличивает целочисленное значение на единицу | A ++ = 11 |
| — | Оператор Decrement уменьшает целочисленное значение на единицу | A— = 9 |
Реляционные операторы
В следующей таблице показаны все реляционные операторы, поддерживаемые C #. Предположим, что переменная A имеет место 10, а переменная B имеет 20, тогда —
| Оператор | Описание | Пример |
|---|---|---|
| == | Проверяет, равны ли значения двух операндов или нет, если да, то условие становится истинным. | (A == B) не соответствует действительности. |
| знак равно | Проверяет, равны ли значения двух операндов или нет, если значения не равны, условие становится истинным. | (A! = B) истинно. |
| > | Проверяет, превышает ли значение левого операнда значение правого операнда, если да, тогда условие становится истинным. | (A> B) неверно. |
| < | Проверяет, является ли значение левого операнда меньше значения правильного операнда, если да, тогда условие становится истинным. | (A <B) истинно. |
| > = | Проверяет, превышает ли значение левого операнда значение правого операнда, если да, тогда условие становится истинным. | (A> = B) неверно. |
| <= | Проверяет, является ли значение левого операнда меньше или равно значению правильного операнда, если да, тогда условие становится истинным. | (A <= B) истинно. |
Логические операторы
В следующей таблице показаны все логические операторы, поддерживаемые C #. Предположим, что переменная A имеет значение Boolean значение true, а переменная B имеет логическое значение false, затем —
| Оператор | Описание | Пример |
|---|---|---|
| && | Вызывается логическим оператором AND.Если оба операнда не равны нулю, условие становится истинным. | (A && B) является ложным. |
| || | Вызывается логическим оператором ИЛИ.Если какой-либо из двух операндов не равен нулю, условие становится истинным. | (A || B) истинно. |
| ! | Вызывается логическим оператором NOT.Используется для изменения логического состояния операнда. Если условие истинно, то логический оператор NOT сделает ложным. | ! (A && B) истинно. |
Побитовые операторы
Побитовый оператор работает с битами и выполняет побитовую операцию. Таблицы истинности для &, |, и ^ заключаются в следующем:
| p | q | p & q | p | q | p ^ q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
Предположим, что A = 60; и B = 13; то в двоичном формате они выглядят следующим образом:
A & B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
Побитовые операторы, поддерживаемые C #, перечислены в следующей таблице. Предположим, что переменная A имеет значение 60, а переменная B имеет значение 13, тогда —
Операторы присваивания
Существуют следующие операторы присваивания, поддерживаемые C # —
| Оператор | Описание | Пример |
|---|---|---|
| знак равно | Простой оператор присваивания, присваивает значения из правых операндов в левый операнд | C = A + B присваивает значение A + B в C |
| + = | Добавить AND присваивания, Он добавляет правый операнд в левый операнд и присваивает результат левому операнду | C + = A эквивалентно C = C + A |
| знак равно | Вычитание и оператор присваивания, он вычитает правый операнд из левого операнда и присваивает результат левому операнду | C — = A эквивалентно C = C — A |
| знак равно | Оператор умножения и присваивания, Он умножает правый операнд на левый операнд и присваивает результат левому операнду | C * = A эквивалентно C = C * A |
| знак равно | Оператор Divide AND assign. Он делит левый операнд на правый операнд и присваивает результат левому операнду | C / = A эквивалентно C = C / A |
| знак равно | Модуль и оператор присваивания, он принимает модуль с использованием двух операндов и присваивает результат левому операнду | C% = A эквивалентно C = C% A |
| << = | Оператор сдвига левой оси и | C << = 2 совпадает с C = C << 2 |
| >> = | Оператор правой смещения и назначения | C >> = 2 совпадает с C = C >> 2 |
| знак равно | Оператор побитового И присваивания | C & = 2 является таким же, как C = C & 2 |
| ^ = | побитовое исключающее ИЛИ и оператор присваивания | C ^ = 2 является таким же, как C = C ^ 2 |
| | = | побитовое включение OR и оператор присваивания | C | = 2 совпадает с C = C | 2 |
Есть несколько других важных операторов, включая sizeof, typeof и ? :поддерживается C #.
StringReader r = obj как StringReader;
Приоритет оператора в C #
Приоритет оператора определяет группировку терминов в выражении. Это влияет на оценку выражения. Некоторые операторы имеют более высокий приоритет, чем другие; например, оператор умножения имеет более высокий приоритет, чем оператор сложения.
Например, x = 7 + 3 * 2; здесь x назначается 13, а не 20, потому что оператор * имеет более высокий приоритет, чем +, поэтому первая оценка выполняется для 3 * 2, а затем 7 добавляется в нее.
Здесь операторы с наивысшим приоритетом появляются в верхней части таблицы, а нижние — внизу. Внутри выражения сначала оцениваются операторы с более высоким приоритетом.
Основы C# | Комментарии C# и переменные
C# является одним из наиболее распространённых языков программирования, который позволяет разрабатывать различные виды приложений на платформах .NET Framework и Windows, а также веб-службы XML, баз данных, клиент-серверного ПО и др. Наиболее часто в качестве редактора и компилятора кодов используется среда Visual C#, отличающаяся удобными конструкторами, понятным пользовательским интерфейсом, интегрированным отладчиком и многими другими инструментами, упрощающими создание прикладных программ. Здесь мы рассмотрим самые базовые понятия комментарии C# и переменные.
Особенности языка C#
C# отличается очень богатым синтаксисом, который в то же время является простым и удобным. Особенно легко даётся изучение программистам, которые уже владеют знаниями и навыками работы с языками С, С++ и Java. C# сочетает в себе все преимущества этих языков, при этом не имеет их недостатков. Одним из основных достоинств «шарпа» является наличие мощных функций, и предоставление прямого доступа к операционной памяти.
«Шарп» пользуется универсальными методами, интеграторами и типами данных, обеспечивающими наивысшую безопасность и производительность разработки программ. Характерной чертой языка является наличие выражений LINQ, с помощью которых можно создавать очень удобные кодовые конструкции со строго типизированными запросами.
C# относится к объектно-ориентированным языкам, который имеет строгую типизацию. Каждая переменная и метод (в том числе входная точка Main), инкапсулируется при определении классов, при этом из родительского класса можно реализовывать неограниченное количество интерфейсов.
Также C# предоставляет инновационные языковые конструкции, упрощающие разработку приложений:
- сигнатура метода (называемая делегатом), позволяющая реализовывать безопасное оповещение о происходящем событии;
- свойство, определяющее функции акцессора для закрытой переменной;
- атрибут, предоставляющий данные о типе функции/переменной/объекта при написании кода;
- внутристрочное комментирование (для XML-документов);
- LINQ – языковой запрос в отношении различных источников данных.
Чтобы взаимодействовать с другими программными обеспечениями типа Windows (объекты COM, собственные библиотеки DLL), язык C# имеет процесс «Взаимодействия». Они позволяют приложениям, написанным на «шарпе», выполнять практически все действия и функции, которые прописаны машинным кодом C++. Также языком C# поддерживается набор указателей и «небезопасных» блоков кода в тех случаях, когда критически важно наличие прямого доступа к операционной памяти.
Основы синтаксиса языка C#
Я планирую написать серию статей посвященным основам разработки на языке C#. Здесь будут рассмотрены только две первых темы, это комментарии и переменные. Также мы создадим наше первое приложение Hello World. Продолжение обучение будет доступно по мере написания статей по ссылкам в конце статьи. Итак, приступим.
Комментарии C#
Комментарии в коде — это текстовые пометки в исходном коде приложения, которые не влияют на сам исходный код, а служат только для повышения удобочитаемости и понятности кода. В них чаще всего содержатся пояснения к сложным участкам кода.
Не смотря на то, что комментарии C# не несут никакой полезной нагрузки для самого приложения, они просто невероятно полезны для долгосрочного поддержания проекта, потому что бывает очень сложно разобраться в чужом коде. А если принять за правило утверждение, что любой написанный самим тобой код, про прошествии полугода становиться «чужим», то я настаиваю, что писать комментарии полезно и нужно. Да, есть противоположное мнение, что код должен быть самодокументированным (то есть понятным для чтения без комментариев), но я придерживаюсь мнения, что даже к такому коду лучше оставлять комментарии C#.
Итак, в языке C# используются два вида комментариев:
- Однострочные (//)- распространяются до перехода на новую строку
- Многострочные (/**/)- распространяются на все строки в промежутке между ключевыми символами.
Комментарии C# в первую очередь нужны, чтобы оставлять заметки которые могут пригодиться в будущем вам или другому программисту, который будет поддерживать ваш код. Кроме того, комментарии часто используются на этапе отладки приложения, чтобы временно пропускать некоторые команды. По оформлению комментариев существует рекомендация добавлять пробел после //, начинать писать новое предложение комментария с большой буквы, а длинное перенесенное с новой строки с маленькой, в конце комментария ставить точку.
Также обязательно используйте комментарии XML-документации ко всем открытым методам, свойствам и конструкторам класса, а желательно вообще ко всем. Это позволяет отображать подсказки использовании. Для добавления этого комментария в Visual Stuio достаточно поставить три символа слеша (///) перед именем метода, свойства и конструктора, и шаблон комментария будет сгенерирован автоматически. Подробнее про формат этих комментариев можно прочитать в документации Micosoft.

Переменные C#
Переменная является одним из базовых понятий в программировании, которое пришло в него из математики. Переменная — это контейнер для хранения информации, имеющий собственное имя. Если рассматривать глубже с технической точки зрения, переменная — это определенная область памяти в системе, к которой можно обращаться для чтения и записи по уникальному в пределах области видимости имени. Если рассматривать с обывательской точки зрения, то переменную можно представить как коробку, на которой наклеен стикер с номером. В коробку мы можем положить что угодно (что может туда поместиться), посмотреть, что там лежит, или вытащить и положить что-либо другое. И мы всегда можем найти конкретную коробку по ее номеру. Так и переменные позволяют сохранять, читать, изменять и удалять нужные нам данные по удобному и понятному имени.
Язык C# является строготипизированным, это означает, что если мы объявили переменную для целых чисел, мы не сможем в ней хранить текстовые данные. Давайте рассмотрим основные наиболее часто используемые типы данных в языке C#
- string — текстовая строка
- int — целое число (от -2 147 483 648 до 2 147 483 647)
- double — дробное число с плавающей запятой
- bool — логическое значение (истина/ложь)
- char — буквенный символ
- decimal — дробное число с фиксированной запятой
- byte — маленькое целое число (от 0 до 255)
- long — большое целое число (от 9 223 372 036 854 775 808 до 9 223 372 036 854 775 807)
- object — базовый тип всего языка
Стоить заметить, что это далеко не полный список всех типов данных. Здесь перечислены только самые часто используемые. Существуют также модифицированные типы данных, такие как uint, которые позволяют задать значения больше нуля, но большего диапазона (в данном случае будет от 0 до 65535). Или наоборот sbyte (от -128 до 127). Но давайте рассмотрим примеры.
Перечислим особенности переменных некоторых типов данных: для отделения дробной части от целой используется символ точки, а не запятой. Строки задаются только в двойных кавычках, а символы только в одинарных. Для типа данных decimal при не пустой дробной части обязательно использование постфикса M. Логический тип принимает одно из двух логических значений true — истина, false — ложь. Отрицательные числа задаться с помощью символа минус перед числом.
Нотации в языке C#
Одну из основных рекомендаций которую я могу дать, это всегда используйте понятные и лаконичные называния для переменных. Имя переменной всегда должно подробно и однозначно описывать собственное содержимое. Лучше всего вообще отказаться от использования односимвольных переменных в коде, иначе отладка ад. В Microsoft docs есть подробная статья о рекомендациях по именованию в языке, но если говорить очень коротко, то можно выделить три популярных стиля именования (нотация):
- Pascal casing — Все первые буквы в имени переменной пишутся с заглавными. Слова соединяются без разделителя.
- Camel casing — Первые слова в имени переменной пишутся с большой буквы, за исключением первого, который тоже пишется с маленькой. Слова соединяются без разделителя.
- Snake casing — Все буквы пишутся строчными. Слова соединяются через символ подчеркивания (_)
В соответствии для этого можно сделать следующие рекомендации:
Pascal для имен классов, свойств, конструкторов, методов, делегатов, событий.
Camel для локальных переменных, аргументов методов.
Snake вообще лучше не использовать. Или только для констант.
Первое приложение на языке C#
Для разработки на языке C# чаще всего используется среда программирования Microsoft Visual Studio. У нее достаточно много версий и редакций, некоторые из них платные, некоторые бесплатные. Я рекомендую на начальном этапе использовать среду самую свежую на текущий момент бесплатную версию Visual Studio Community 2017. Скачиваете, устанавливаете, запускаете и видите главное окно. Здесь вам нужно в меню Новый проект выбрать элемент Консольное приложение (.NET Framework).

Если его не будет в списке, то нажмите на ссылку Создать новый проект расположенную ниже. Проверьте в левом меню, что выбрано консольное приложение или при необходимости найдите и выберите его, после чего введите имя проекта и нажмите ОК.

В открывшимся окне редактора исходного кода вводим следующий код

После чего нажимаем клавишу F5 или кнопку Пуск вверху приложения
После чего выполнится компиляция и запуск приложения. Мы увидим консольное приложение, которое просто выведет текст на экран. Если после этого нажать клавишу Enter, приложение завершит свою работу.

Это самый элементарный пример, который очень часто используется в программировании.
Работа с GitHub
Если нет желания вручную набирать исходный код, можно воспользоваться системой контроля версий, и скачать этот пример готовым из репозитория github. Для этого перейди по ссылке, и нажми на кнопку Clone or Download. В открывшимся окне выбери Open in Visual Studio (если установлено расширение GitHub для Visula Studio) или Download ZIP.

Если ты нажмешь на Open in Visual Studio, то появится еще одно окно подтверждения. Нажимай на кнопку Открыть.

После этого у тебя на компьютере запустится приложение Visual Studio и в обозревателе команд будет автоматически выставлены настройки клонирования проекта. Нужно только нажать кнопку Клонировать.

После загрузки приложения в Обозревателе решений щелкни на файл решения (.sln), и получишь готовый к использованию проект.

Если Расширение Github для Visual Studio у тебя не было установлено, то после загрузки просто распакуй скаченный архив в любую удобную тебе папку на компьютере и открой файл решения. Получишь тот же результат.
На этом мы завершим наш вводный урок посвященный основам языка C#. Кроме того, рекомендую прочитать статью Связный список C# — Linked List C#. А также подписывайтесь на группу ВКонтакте, Telegram и YouTube-канал. Там еще больше полезного и интересного для программистов. И не забывайте оставлять комментарии C# в коде своих проектов