Public 只读字段 v.s。仅获取 属性

Public readonly field v.s. get-only property

在某些情况下您需要 public 只读字段 v.s。一个只获取自动实现的 属性?

public class Foo
{
    public readonly string Hello;

    public string Hello2 { get; }
}

两者都只能在构造函数期间设置,并且都提供 class 之外的只读访问权限。我有点累了,所以我可能会遗漏一些东西。

一个原因是数据绑定 - .net 实现了对属性的绑定,而不是对 public 字段的绑定。

这里有一些讨论:Why can't we use public fields for data binding in C#?

将其设为 属性 而不是字段意味着它可以在接口上使用。

确切的实现(尽管自动属性实际上没有太多实现...)也是抽象的,因此您将来可以在不破坏(编译)兼容性的情况下将其基于字段组合。