Microsoft在C#6中引入了一种新语法,允许您将属性设置为只读,如下所示:
public class Animal
{
public string MostDangerous { get; } = "Mosquito";
}
我想知道这种方法的附加价值是什么。
只写作有什么不同:
public class Animal
{
public const string MostDangerous = "Mosquito";
}
甚至:
public class Animal
{
public string MostDangerous
{
get
{
return "Mosquito";
}
}
}
答案 0 :(得分:17)
您的示例使用字符串常量,但不能显示所有可能性。看看这个片段:
class Foo
{
public DateTime Created { get; } = DateTime.Now; // construction timestamp
public int X { get; }
public Foo(int n)
{
X = n; // writeable in constructor only
}
}
只读属性是每个实例,可以从构造函数设置。与const
字段非常不同,其值必须在编译时确定。属性初始值设定项是一个单独的功能,并遵循字段初始值设定项的规则和限制。
答案 1 :(得分:2)
较新的语法是努力减少C#的冗长。它只是语法糖。生成的IL类似于具有getter和后备存储的auto属性。
答案 2 :(得分:1)
对C#的这种改进直接来自VB,并且无需实现支持字段和构造函数初始化程序:
Public ReadOnly dateStamp As DateTime = Datetime.Now