C# 6.0 中的只读 属性
Read-Only Property in C# 6.0
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";
}
}
}
您的示例使用的字符串常量无法显示所有可能性。看看这个片段:
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
字段非常不同。 属性 初始化器是一个单独的功能,并遵循字段初始化器的规则和限制。
更新的语法旨在减少 C# 的冗长。这只是语法糖。生成的 IL 类似于具有 getter 和后备存储的自动 属性。
这一对 C# 的改进直接取自 VB,并且无需实现支持字段和构造函数初始值设定项:
Public ReadOnly dateStamp As DateTime = Datetime.Now
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";
}
}
}
您的示例使用的字符串常量无法显示所有可能性。看看这个片段:
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
字段非常不同。 属性 初始化器是一个单独的功能,并遵循字段初始化器的规则和限制。
更新的语法旨在减少 C# 的冗长。这只是语法糖。生成的 IL 类似于具有 getter 和后备存储的自动 属性。
这一对 C# 的改进直接取自 VB,并且无需实现支持字段和构造函数初始值设定项:
Public ReadOnly dateStamp As DateTime = Datetime.Now