.net NET中自动属性的用途

.net NET中自动属性的用途,.net,properties,automatic-properties,.net,Properties,Automatic Properties,为什么会这样: public string Foo {get;set;} 被认为比这更好的是: public string Foo; 我一辈子都无法解决这个问题。有人能解释一下吗 感谢,因为您可以透明地(从客户机代码的角度)更改setter/getter的实现,但如果您直接公开底层属性(因为它不兼容二进制文件),则无法执行相同的操作 但是,自动属性有一种特定的代码味道,因为它们使得不需要再三考虑就可以很容易地公开类状态的某些部分。Java也遇到了这种情况,在许多项目中,到处都

为什么会这样:

    public string Foo {get;set;}
被认为比这更好的是:

    public string Foo;
我一辈子都无法解决这个问题。有人能解释一下吗


感谢

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


但是,自动属性有一种特定的代码味道,因为它们使得不需要再三考虑就可以很容易地公开类状态的某些部分。Java也遇到了这种情况,在许多项目中,到处都有
get/setXxx
对暴露内部状态(通常不需要它,“以防万一”),这使得属性基本上是公共的。

而字段的用途是对象状态存储,属性的用途仅仅是访问。区别可能是概念上的,而不是实际的,但是自动属性提供了一种方便的语法来声明两者。

这就是答案-如果您想更改Foo的计算或存储方式,可以透明地进行更改。我不明白为什么您不能从直接字段访问透明地更改属性。客户端代码仍将使用myObject.Foo=bar或Console.Write(myObject.Foo)。客户端代码没有更改…@David:想下注吗?a) 它肯定不是二进制兼容的,所以您至少需要重新编译。b) 在某些情况下,它与源代码不兼容-例如,可以使用字段作为out参数的参数,但不能使用属性。然后是任何使用反射的东西(比如数据绑定)。只要对公共领域说不…谢谢你们。我读了由0xA3链接的文章。有些区别似乎有点模糊(至少对于我编写的代码类型而言),但我看到了好处。感谢您的澄清。与往常一样,当这个话题突然出现时,请阅读Jon Skeet的>