C# “一词”的确切含义是什么;“取消引用”;一个物体?

C# “一词”的确切含义是什么;“取消引用”;一个物体?,c#,dereference,C#,Dereference,我正在阅读C#8中名为nullable引用类型的新特性的描述。该描述讨论了所谓的空原谅运算符。描述中的示例讨论了引用类型实例的反引用(我认为是这样): 当您明确知道时,也可以使用null原谅运算符 表达式不能为null,但编译器无法成功 认识到这一点。在下面的示例中,如果IsValid方法 返回true,其参数不为null,可以安全地取消引用 它: 如果没有null原谅运算符,编译器将生成 p.名称代码的以下警告:警告CS8602:取消对的引用 可能为空的引用 我的印象是,在C#中,取消对对象

我正在阅读C#8中名为nullable引用类型的新特性的描述。该描述讨论了所谓的空原谅运算符。描述中的示例讨论了引用类型实例的反引用(我认为是这样):

当您明确知道时,也可以使用null原谅运算符 表达式不能为null,但编译器无法成功 认识到这一点。在下面的示例中,如果IsValid方法 返回true,其参数不为null,可以安全地取消引用 它:

如果没有null原谅运算符,编译器将生成 p.名称代码的以下警告:警告CS8602:取消对的引用 可能为空的引用

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


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

解引用意味着跟随引用访问实际的底层对象。如果引用为
null
,这将导致一个大问题。

Q:c#取消引用对象意味着将其设置为null。A:不,绝对不是。“取消引用对象”表示“获取指针指向的变量”:。是的,“取消引用”适用于“引用类型实例”。@paulsm4我认为这是一个很好的答案,您应该将其移动到一个答案以获得代表:-)。
     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); 
     }