我在.NET 4.6.1 C#项目中看到过这种属性声明
public object MyObject => new object();
我习惯于声明这样的只读属性:
public object MyObject { get; }
据我所知,两者之间存在一些差异(第一个创建了一个新对象),但我想要更深入的解释,以及何时使用其中任何一个的一些迹象。
答案 0 :(得分:15)
第一个使用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
,而实际上只是指定给字段。
(这两个" equivalencies"正在使用老式的属性声明,你总是将get
,set
或两者作为包含代码的块。)
答案 1 :(得分:3)
每次调用属性getter时,C#6都会计算箭头函数右侧的表达式。
在您的情况下,您每次都要new object()
实例化。
在另一种情况下,它会从属性的支持字段中读取。