【发布时间】:2017-12-05 03:36:09
【问题描述】:
我的团队遵循一般的 .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; } 之间的语义差异是什么(如果有)?它们与编译器是否有明显的不同?
【问题讨论】:
-
@PeterDuniho 在我看来它不是重复的。问题是关于只读属性和字段,而不是关于只读和私有关键字。
-
@Backs:“不是关于只读和私有关键字”——当然是。
readonly仅应用于字段。 “只读”属性只是一个没有可访问设置器的属性。无法访问是因为 setter 根本不存在还是因为它是private完全无关紧要。从本质上讲,这仍然是一个与多年来提出的所有其他问题相同的问题。 -
如果它汇集到实质性回答问题的信息,我可以将其标记为重复。不幸的是,由于 C# 中的 readonly-auto-property 功能相对较新,因此链接线程中的许多内容并不真正适用。我发现严格回答了“公共只读字段和公共只读属性在语义上有何不同?”的问题。是 here,它演示了公共只读属性的 IL:看起来没有语义差异。
标签: c# .net refactoring