Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операции и приведения.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
200 Кб
Скачать
☆

Операция поглощения null

Операция поглощения null (??) представляет собой сокращенный механизм, обеспе­чивающий возможность работы с null-значениями в выражениях, включающих ссылоч­ные типы и типы, которые допускают null. Операция размещается между двумя операн­дами — первый должен иметь тип, допускающий null-значения, или ссылочный, а второй должен быть того же типа, что и первый, либо типа, неявно преобразуемого к типу перво­го операнда.

Операция поглощения null работает следующим образом:

  • если первый операнд не равен null, то все выражение принимает значение перво­го операнда;

  • если первый операнд равен null, все выражение принимает значение второго опе­ранда.

Например:

int? а = null;

int b;

b = a ?? 10; // b имеет значение 10

a = 3;

b = a ?? 10; //b имеет значение 3

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

Приоритеты операций

В табл. 7.4 представлены приоритеты операций С#. Операции, указанные в верхней части таблицы, имеют наивысший приоритет (т.е. вычисляются первыми в выражении, содержащем множество операций).

Таблица 7.4. Приоритеты операций C#

Группа

Операции

Первичные

().[] x++ x-- new typeof sizeof checked unchecked

Унарные

+ - ! ~ ++x -x приведения

Умножения/деления

/ * %

Сложения/вычитания

+ -

Побитового сдвига

<< >>

Отношения

<= >= <> is as

Сравнения

== !=

Битовое «И»

&

Битовое исключающее «ИЛИ»

^

Битовое «ИЛИ»

|

Логическое «И»

&&

Логическое «ИЛИ»

||

Тернарная операция

? :

Присваивания

= += -= *= .= %= &= |= ^= <<= >>= >>>=

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

Безопасность типов

В разделе 6.1 отмечалось, что промежуточный язык (IL) поддерживает строгую безопас­ность типов в коде. Строгая типизация обеспечивает работу многих служб, представляе­мых .NET, включая безопасность и межъязыковое взаимодействие. Как и следовало ожи­дать от языка, компилируемого в IL, C# также является строго типизированным. Помимо прочего, это означает, что типы данных не всегда являются гладко взаимозаменяемыми. В этом разделе речь пойдет о преобразованиях между примитивными типами.

Язык C# также поддерживает преобразование между разными ссылочными ти­пами и всегда позволяет определить, как создаваемые вами типы данных ведут себя при преобразовании в другие типы и обратно. Обе эти темы обсуждаются далее в настоящей главе. С другой стороны, обобщения (generics) позволяют избе­жать некоторых наиболее часто встречающихся ситуаций, когда может пона­добиться преобразование типов. Подробности ищите.в главах 5 и 10.