【问题标题】:Purpose of automatic properties in .NET.NET 中自动属性的用途
【发布时间】:2011-03-24 02:37:27
【问题描述】:

为什么会这样:

    public string Foo {get;set;}

认为比这更好:

    public string Foo;

我这辈子都搞不定。有人能解释一下吗?

谢谢

【问题讨论】:

标签: .net properties automatic-properties


【解决方案1】:

因为您可以透明地(从客户端代码的角度)更改 setter/getter 的实现,而您不能这样做,如果您直接公开底层属性(因为它不兼容二进制)。

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

【讨论】:

  • 这就是答案 - 如果您想更改 Foo 的计算或存储方式,您可以透明地进行。
  • 我不明白为什么您不能透明地从直接字段访问更改为属性。客户端代码仍将使用 myObject.Foo = bar 或 Console.Write(myObject.Foo)。客户端代码没有变化...
  • @David:想打赌吗? a) 它绝对不是二进制兼容的,所以你至少需要重新编译。 b) 在某些情况下它与源不兼容 - 例如,您可以将字段用作 out 参数的参数,但不能使用属性。然后是使用反射的任何东西(如数据绑定)。对公共领域说不...
  • 谢谢大家。我阅读了 0xA3 链接的文章。有些区别似乎有点模糊(至少对于我编写的那种代码而言),但我可以看到它的好处。感谢您的澄清。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2020-02-16
    • 2017-11-18
    • 2013-02-12
    • 2015-03-16
    • 1970-01-01
    • 2011-01-24
    • 2021-08-26
    相关资源
    最近更新 更多