Читаем Язык программирования C#9 и платформа .NET5 полностью

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

Для указания способности иметь значение null в ссылочных типах, допускающих null, применяется тот же самый символ ?. Однако он не является сокращением для использования System.Nullable, т.к. на месте Т могут находиться только типы значений. Не забывайте, что обобщения и ограничения рассматриваются в главе 10.

<p id="AutBody_Root187">Включение ссылочных типов, допускающих null</p>

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

• Контекст с заметками о допустимости значения null: включает/отключает заметки о допустимости null(?) для ссылочных типов, допускающих null.

• Контекст с предупреждениями о допустимости значения null: включает/отключает предупреждения компилятора для ссылочных типов, допускающих null.

Чтобы увидеть их в действии, создайте новый проект консольного приложения по имени FunWithNullableReferenceTypes. Откройте файл проекта (если вы используете Visual Studio, тогда дважды щелкните на имени проекта в окне Solution Explorer или щелкните правой кнопкой мыши на имени проекта и выберите в контекстном меню пункт Edit Project file (Редактировать файл проекта)). Модифицируйте содержимое файла проекта для поддержки ссылочных типов, допускающих null, за счет добавления элемента (все доступные варианты представлены в табл. 4.5).

 

    Exe

    net5.0

    enable

 

Элемент оказывает влияние на весь проект. Для управления меньшими частями проекта используйте директиву компилятора #nullable, значения которой описаны в табл. 4.6.

<p id="AutBody_Root188">Ссылочные типы, допускающие null, в действии</p>

Во многом из-за важности изменения ошибки с типами, допускающими значение null, возникают только при их ненадлежащем применении. Добавьте в файл Program.cs следующий класс:

public class TestClass

{

  public string Name { get; set; }

  public int Age { get; set; }

}

Как видите, это просто нормальный класс. Возможность принятия значения null появляется при использовании данного класса в коде. Взгляните на показанные ниже объявления:

string? nullableString = null;

TestClass? myNullableClass = null;

Настройка в файле проекта помещает весь проект в контекст допустимости значения null, который разрешает применение объявлений типов string и TestClass с заметками о допустимости значения null (?). Следующая строка кода вызывает генерацию предупреждения (CS8600) из-за присваивания null типу, не допускающему значение null, в контексте допустимости значения null:

// Предупреждение CS8600 Converting null literal or possible null

// value to non-nullable type

//   Преобразование литерала null или возможного значения null

//   в тип, не допускающий null

TestClass myNonNullableClass = myNullableClass;

Для более точного управления тем, где в проекте находятся контексты допустимости значения null, с помощью директивы компилятора #nullable можно включать или отключать контекст (как обсуждалось ранее). В приведенном далее коде контекст допустимости значения null (установленный на уровне проекта) сначала отключается, после чего снова включается за счет восстановления настройки из файла проекта:

#nullable disable

TestClass anotherNullableClass = null;

// Предупреждение CS8632 The annotation for nullable reference types

// should only be used in code within a '#nullable' annotations

//   Заметка для ссылочных типов, допускающих значение null,

//   должна использоваться только в коде внутри

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT