Ссылочные типы, допускающие null
null. Переменным ссылочных типов, не допускающих null, во время инициализации должны присваиваться отличающиеся от null значения, которые позже нельзя изменять на null. Переменные ссылочных типов, допускающих null, могут принимать значение null, но перед первым использованием им по-прежнему должны присваиваться какие-то значения (либо фактический экземпляр чего-нибудь, либо значение null).Для указания способности иметь значение null
null, применяется тот же самый символ ?. Однако он не является сокращением для использования System.Nullable, т.к. на месте Т могут находиться только типы значений. Не забывайте, что обобщения и ограничения рассматриваются в главе 10.Включение ссылочных типов, допускающих null
Поддержка для ссылочных типов, допускающих null
null. Это может распространяться на целый проект (за счет обновления файла проекта) или охватывать лишь несколько строк (путем применения директив компилятора). Вдобавок можно устанавливать следующие два контекста.• Контекст с заметками о допустимости значения null:
null(?) для ссылочных типов, допускающих null.• Контекст с предупреждениями о допустимости значения null:
null.Чтобы увидеть их в действии, создайте новый проект консольного приложения по имени FunWithNullableReferenceTypes
null, за счет добавления элемента (все доступные варианты представлены в табл. 4.5).
Элемент
#nullable, значения которой описаны в табл. 4.6.Ссылочные типы, допускающие null, в действии
Во многом из-за важности изменения ошибки с типами, допускающими значение 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,
// должна использоваться только в коде внутри
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT