Основы теории C#8.0 Глава 4. Операторы и поток управления

Основы C#8.0 Глава 4. Операторы и поток управления

4.1 Операторы

Некоторые операторы представлены в виде символов, таких как +, -, ?. или ?? и т. д., тогда как другие операторы являются ключевыми словами, например default и is .

4.1.1 Унарные положительные и отрицательные операторы

Унарный положительный оператор (+) мало влияет на значения и в C# является избыточным.

4.1.2 Операторы двоичной арифметики

В C++ в качестве независимых операторов разрешено использовать двоичные выражения, такие как 4+5;. В C# в качестве независимых операторов можно использовать только выражения присваивания, вызова, увеличения, уменьшения, ожидания и создания объекта.

Приоритет и ассоциативность влияют только на порядок выполнения самих операторов, но не на порядок вычисления операндов. В C# операнды всегда вычисляются слева направо. В C++ спецификация C++ позволяет различным реализациям выбирать порядок вычисления операндов.

        public static int A()
        {
            Console.WriteLine("A");
            return 1;
        }
        public static int B()
        {
            Console.WriteLine("B");
            return 2;
        }
        public static int C()
        {
            Console.WriteLine("C");
            return 3;
        }
        static void Main(string[] args)
        {
            Console.WriteLine(A() + B() * C());
            Console.ReadKey();
        }

В C# приведенный выше код выводит ABC7 вертикально. Если это C++, это не обязательно в порядке ABC.

Избегайте использования двоичных типов с плавающей запятой для условий равенства. Либо определите, находится ли разница в пределах допустимого диапазона, либо используйте десятичные типы.

Деление 0 с плавающей запятой на 0 в C# приводит к результату «Не число». Извлечение квадратного корня из отрицательного числа также даст вам NaN.

Как только число с плавающей запятой выходит за пределы, результат сохраняется как положительная бесконечность (∞) или отрицательная бесконечность (-∞).

//输出-∞
Console.WriteLine(-1.0 / 0);

4.1.3 Составной оператор присваивания

4.1.4 Операторы увеличения и уменьшения

Для вызова типа M(x++,x++) предполагается, что начальное значение x равно 1. В C++ это может быть либо M(1,2), либо M(2,1), что определяется компилятором. . C# всегда вызывает M(1,2), поскольку C# дает две гарантии: во-первых, фактические параметры, передаваемые в вызов, всегда вычисляются слева направо; во-вторых, увеличенное значение всегда присваивается переменной, а затем используется значение выражение (второй пункт я не понял).

4.1.5 Константные выражения и константные символы

Константное выражение — это выражение, которое компилятор может оценить во время компиляции, а не во время выполнения.

4.3 Блоки кода

4.4 Блоки кода, области видимости и пространства объявлений

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

Вставьте сюда описание изображения

4.5 Булевы выражения

C# требует, чтобы условие имело логический тип, поэтому это устраняет распространенную ошибку кодирования в C++ — запись == вместо =.

4.5.1 Операторы отношения и операторы равенства

4.5.2 Логические операторы

4.5.3 Оператор логического отрицания

4.5.4 Условные операторы

Поскольку это единственный тернарный оператор, его часто называют просто тернарным оператором.

condition ? consequence : alternative

Условные операторы также используют некоторую форму сокращенной оценки . Если условие истинно, оценивается только следствие, в противном случае оценивается только альтернатива.

C# требует, чтобы следствие условного оператора имело тот же тип, что и альтернативное выражение, и не проверяет контекст выражения при оценке типа.

Вставьте сюда описание изображения

4.6 Программирование нуля

4.6.1 Проверка нулевых значений

**== и !=** можно использовать во всех версиях C#, но они могут быть переопределены классами, что немного снижает производительность.

Метод **ReferenceEquals()** используется для определения того, указывают ли две ссылочные переменные на один и тот же объект в памяти, а не для определения того, имеют ли они одинаковое содержимое данных. Его нельзя переопределить, что гарантирует неизменность его поведения.

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

Оператор сопоставления с образцом is { } также можно использовать, чтобы определить, не является ли переменная нулевой, но у него есть небольшое преимущество: если переменная имеет тип, не допускающий значения NULL, компилятор выдаст предупреждение.

4.6.2 Оператор нулевого слияния и оператор присваивания нулевого слияния

**Оператор объединения значений null??** просто означает «если это значение равно нулю, используйте другое значение». Поддерживает оценку короткого замыкания, может быть идеально связан и может записываться непрерывно, x??y??z.

В C#8.0 введен оператор присваивания нулевого слияния , если переменная слева от знака равенства не равна нулю. В противном случае переменной слева от знака равенства будет присвоено значение выражения справа от знака равенства. Например, name??= "имя";

4.6.3 Пустой условный оператор

В C#6.0 появился оператор ?., который называется нулевым условным оператором . Результат операции, который он генерирует, всегда имеет тип, допускающий значение NULL, и его также можно использовать для доступа к массиву. Например, сегменты?[0] будут работать на основе предпосылки что массив не равен нулю.Получить элементы массива.

//C#8.0中数组及其元素均声明为可空
string?[]? segments;

4.6.4 Оператор, включающий нуль

uri = string.Join('/',segments!);

В C# 8.0 вы можете использовать оператор включения нуля (!), чтобы избежать предупреждений и сообщить компилятору, что программисты могут гарантировать, что переменная не должна иметь значение NULL, но библиотека времени выполнения все равно будет проверять наличие значений NULL во время выполнения.

4.7 Побитовые операторы

4.7.1 Оператор смены

4.7.2 Побитовые операторы

В отличие от &&, оператор & всегда оценивает обе стороны, даже если левая часть ложна, то же самое делает |.

Существует встроенный System.Convert.ToString(value,2), который можно преобразовать в двоичный формат.

4.7.3 Побитовый составной оператор присваивания

4.8 Операторы потока управления

4.8.1. Циклы while и do/ while

4.8.2 для цикла

4.8.3 цикл foreach

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

foreach(type variable in collection)
	statement

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

4.8.4 Базовый оператор переключателя

switch(expression)
{
	case constant:
		statements
	default:
		statements
}

Конечная точка этой группы операторов должна быть « недостижимой », другими словами, она не может «пройти» или «проникнуть» в следующую секцию переключателя. Поэтому оператор choke обычно является оператором перехода, например, Break, return или перейти.

В операторе switch должен быть хотя бы один раздел Switch. Switch{} допустим, но выдаст предупреждение.

В C++, если секция переключателя не заканчивается оператором перехода, элемент управления «проникнет» в следующую секцию переключателя и выполнит в ней код. от одной секции переключателя к другой. . Но вы можете использовать операторы goto для достижения проникновения.

В C# 7.0 представлено сопоставление шаблонов для переключателя.

4.9 Оператор перехода

4.9.1 оператор разрыва

4.9.2 оператор продолжения

4.9.3 оператор перехода

C# поддерживает goto и может использовать goto только для проникновения в коммутатор. C# запрещает переход к блокам кода через goto, что позволяет избежать большинства злоупотреблений goto, с которыми вы можете столкнуться в других языках.

4.10 Директивы препроцессора C#

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

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

4.10.1 Исключение и включение кода

Директивы препроцессора обрабатывают различия между платформами.

4.10.2 Определение символов препроцессора

4.10.3 Генерация ошибок и предупреждений

4.10.4 Отключение предупреждающих сообщений

4.10.5 теперь предупреждать: параметры

4.10.6 Укажите номер строки

4.10.7 Подсказки визуального редактора

C# позволяет объявлять регионы кода с помощью директивы #region.

4.10.8 Включение типов ссылок, допускающих значение NULL

Директивы препроцессора обрабатывают различия между платформами.

4.10.2 Определение символов препроцессора

4.10.3 Генерация ошибок и предупреждений

4.10.4 Отключение предупреждающих сообщений

4.10.5 теперь предупреждать: параметры

4.10.6 Укажите номер строки

4.10.7 Подсказки визуального редактора

C# позволяет объявлять регионы кода с помощью директивы #region.

4.10.8 Включение типов ссылок, допускающих значение NULL

Supongo que te gusta

Origin blog.csdn.net/Story_1419/article/details/132408857
Recomendado
Clasificación