Что именно означает термин «разыменование» объекта?

#c# #dereference

#c# #разыменование

Вопрос:

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

Microsoft Docs

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

 public static void Main() 
{
   Person? p = Find("John");
   if (IsValid(p))
   {
       Console.WriteLine($"Found {p!.Name}");
   } 
}
public static bool IsValid(Person? person) 
{
   return person != null amp;amp; !string.IsNullOrEmpty(person.Name); 
}
  

Без оператора, прощающего нуль, компилятор генерирует
следующее предупреждение для p.Name кода: Предупреждение CS8602 : разыменование
, возможно, нулевой ссылки.

У меня создалось впечатление, что в C # разыменование объекта означает установку для него значения null. Но похоже, что Microsoft называет доступ к свойству объекта разыменованием объекта.

Вопрос в том, что означает термин разыменования в C #, когда мы говорим об экземплярах ссылочного типа, а не об управляемых и неуправляемых указателях.

Комментарии:

1. Вопрос: c # разыменование объекта означает присвоение ему значения null. О: Нет, абсолютно нет. «Разыменование объекта» означает «получение переменной, на которую указывает указатель»: learn.microsoft.com/en-us/dotnet/csharp/language-reference /. … И да, «разыменование» применяется к «экземплярам ссылочного типа».

2. @paulsm4 Я бы сказал, что это такой же хороший ответ, как и любой другой, вы должны переместить его в ответ, чтобы получить представление :-).

Ответ №1:

Разыменование означает следование ссылке для доступа к фактическому базовому объекту. Если ссылка есть null , это вызывает большую проблему.

Комментарии:

1. Здравствуйте. Какую проблему мы можем получить, если ссылка равна null? Можете ли вы дать мне несколько ссылок, где можно прочитать об этом?

2. @ВладимирБереза Это приведет к исключению NullReferenceException: learn.microsoft.com/en-us/dotnet/api/… Исключение NullReferenceException выдается при попытке получить доступ к элементу типа, значение которого равно null .

3. @NielsR. Спасибо. Конечно, я знаю об исключении NullReferenceException и о том, как его предотвратить. Но Джоэл Коэхорн сказал о большой проблеме. Возможно, он имел в виду что-то другое в некоторых сценариях.