声明属性时,“=>”在 .Net C# 中执行什么操作

本文关键字:Net 执行 操作 什么 属性 声明 | 更新日期: 2023-09-27 18:35:22

我在 .NET 4.6.1 C# 项目中看到了这种属性声明

public object MyObject => new object();

我习惯于像这样声明只读属性:

public object MyObject { get; }

我知道两者之间存在一些差异(第一个创建一个新对象),但我想要更深入的解释以及何时使用它们中的任何一个的一些指示。

声明属性时,“=>”在 .Net C# 中执行什么操作

第一个使用 new-to-C#-6 表达式体成员语法。它相当于:

public object MyObject
{
    get { return new object(); }
}

第二个也是 C# 6 的新增功能 - 一个自动实现的只读属性。它相当于:

private readonly object _myObject; // Except using an unspeakable name
public object MyObject
{
    get { return _myObject; }
}

您只能从声明类中的构造函数中分配给MyObject,而构造函数实际上只是分配给字段。

(这两种"等价"都使用老式的属性声明,其中您始终将getset或两者作为包含代码的块。

每次调用属性 getter 时,C# 6 都会计算箭头函数右侧的表达式。

在您的情况下,您每次都会实例化一个new object()

在另一种情况下,它将从属性的支持字段中读取。