public readonly field vs get-only property

Ale*_*ith 23 c# c#-6.0

是否存在需要公共只读字段与仅获取自动实现属性的情况?

public class Foo
{
    public readonly string Hello;

    public string Hello2 { get; }
}
Run Code Online (Sandbox Code Playgroud)

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

pet*_*bil 22

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

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

  • 我真的想把你和PaulF的标记作为答案,因为他们都有点意义,但是如果我可以的话,我也可以给你留下你的印象! (4认同)

Pau*_*ulF 9

一个原因是数据绑定 - .net实现绑定到属性而不是公共字段.

这里有一些讨论:为什么我们不能在C#中使用公共字段进行数据绑定?