术语“取消引用”对象到底是啥意思?

Posted

技术标签:

【中文标题】术语“取消引用”对象到底是啥意思?【英文标题】:What exactly does mean the term "dereferencing" an object?术语“取消引用”对象到底是什么意思? 【发布时间】:2021-01-10 23:06:34 【问题描述】:

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

Microsoft Docs

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

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); 

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

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

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

【问题讨论】:

问:c#取消引用一个对象意味着将其设置为null。答:不,绝对不是。 “取消引用对象”意味着“获取指针指向的变量”:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…。是的,“取消引用”适用于“引用类型实例”。 @paulsm4 我想说这是一个很好的答案,你应该把它移到一个答案以获得代表:-)。 【参考方案1】:

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

【讨论】:

你好。如果引用为空,我们会遇到什么问题?你能给我一些链接吗?

以上是关于术语“取消引用”对象到底是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

我们所说的“分支”到底是啥意思?

“语义”是啥意思?为啥“移动语义”这样命名,而不是任何其他术语?

术语“共享变量”是啥意思?它与“全局变量”有何不同?

JavaScript 回调中的术语“通过”或“通过”是啥意思?

Spring中@autowired注释的用途是啥。术语自动装配是啥意思[重复]

外贸术语中MAC是啥意思