首页 > 解决方案 > 术语“取消引用”对象到底是什么意思?

问题描述

我正在阅读 C# 8 中称为可空引用类型的新功能的描述。该描述讨论了所谓的 null-forgiving 运算符。描述中的示例讨论了引用类型实例的取消引用(我认为是这样):

微软文档

当您明确知道表达式不能为 null 但编译器无法识别时,您也可以使用 null-forgiving 运算符。在以下示例中,如果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 && !string.IsNullOrEmpty(person.Name); 
}

p.Name如果没有 null-forgiving 运算符,编译器会为代码生成以下警告: 警告CS8602:取消引用可能为 null 的引用。

我的印象是,在 C# 中取消引用一个对象意味着将其设置为 null。但看起来微软将访问对象的属性称为取消引用该对象。

问题是:当我们谈论引用类型实例而不是托管和非托管指针时,C# 中的取消引用术语是什么意思。

标签: c#dereference

解决方案


取消引用意味着遵循引用来访问实际的底层对象。如果引用是null,这会导致一个大问题。


推荐阅读