我的团队遵循一般的.NET约定,您应该在类型上公开公共属性,而不是公开字段。但是,我遇到了一个主要公开字段的类......但是它包含了两个'识别'数据片段:
public readonly int WidgetId;
public readonly string WidgetName;
我非常想将这些重构为属性,即
public int WidgetId { get; }
public string WidgetName { get; }
所以他们符合班上其他人的惯例。我知道支持和反对公共领域与属性的论据。但是,鉴于 readonly-auto-properties 特别是一个相对较新的C#功能,我想知道:
public readonly int Foo
和public int Foo { get; }
之间的语义差异是什么?它们与编译器有意义的不同吗?
答案 0 :(得分:0)
您的新财产等于:
private readonly string _widgetName = GetWidgetName();
public string `
{
get { return _widgetName; }
}
因此,该值存储在_widgetName
中并且它是安全的,因为它是只读的,并且您不能像以前那样更改它的值。
使用属性WidgetName
,您只能更改对字段_widgetName
的访问权限,而不能更改对该值的访问权限。例如:
private readonly string _widgetName = GetWidgetName();
public string `
{
get
{
if (_widgetName == null) throw new Exception("Value is not set");
return _widgetName;
}
}
您可以更好地控制自己的数据,但通常情况下 - 如果您只是将readonly
字段转换为readonly
属性,则没有区别。
有关属性的一些信息是here。