.NET中自动属性的用途

Dav*_*vid 8 .net properties automatic-properties

为什么是这样:

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

被认为比这更好:

    public string Foo;
Run Code Online (Sandbox Code Playgroud)

我不能为我的生活而努力.任何人都能解释一下吗?

谢谢

Dir*_*irk 12

因为您可以透明地(从客户端代码的角度)更改setter/getter的实现,如果直接公开底层属性(因为它不是二进制兼容的),则无法执行相同的操作.

但是,有一些与自动属性相关的代码气味,因为它们很容易暴露出你的类状态的某些部分,而不需要再考虑.这也遭遇了Java,在许多项目中,你会发现get/setXxx所有的对都暴露出内部状态(通常不需要它,"以防万一"),这使得属性基本上是公开的.

  • @David:想下注吗?a)它绝对不是二进制兼容的,所以你至少*需要重新编译.b)在某些情况下它不是源兼容的 - 例如,您可以使用字段作为out参数的参数,但不能使用属性.然后有任何使用反射(如数据绑定).对公共领域说不 (6认同)