【问题标题】: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 我想说这是一个很好的答案,你应该把它移到一个答案以获得代表:-)。

标签: c# dereference


【解决方案1】:

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

【讨论】:

  • 你好。如果引用为空,我们会遇到什么问题?你能给我一些链接吗?
猜你喜欢
  • 2010-12-17
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多