【问题标题】:Why does Microsoft suggest we use properties for static data types, rather than static fields?为什么微软建议我们使用静态数据类型的属性,而不是静态字段?
【发布时间】:2020-02-18 16:21:47
【问题描述】:

this 仍然相关吗?

建议您尽可能使用静态属性而不是公共静态字段。

如果是,为什么?

编辑:当我们要求澄清为什么微软的编码风格是这样定义的时,我认为这不是一个基于意见的问题。 p>

【问题讨论】:

  • 功能抽象
  • 公共字段总是被认为是不好的样式,不仅是静态的。
  • 属性允许你随着时间的推移改变事物,比如向属性设置器添加验证以验证值,或改变状态等。你不能对字段做这样的事情,并将字段更改为稍后的属性将是二进制破坏性更改。
  • 避免使用静态字段属性的另一个原因是可测试性 - 开发人员总是很想使用它们,导致并行运行时测试以意想不到的方式失败

标签: c# .net-core properties field


【解决方案1】:

在链接的文章中,还有一个链接Field Usage Guidelines,里面有这样的解释:

不要使用公共或受保护的实例字段(在 Visual Basic 中为公共或受保护)。如果您避免将字段直接暴露给开发人员,则可以更轻松地对类进行版本控制,因为在保持二进制兼容性的同时不能将字段更改为属性。

这适用于静态字段以及非静态/实例字段。这意味着您可以稍后更改支持属性的字段的设置或获取方式,而不会破坏依赖关系。
如果您发布了带有公共字段的类,那么您永远无法在不打扰已经访问该字段的开发人员的情况下更改它。

【讨论】:

  • “这适用于静态字段以及非静态/实例字段。”我不同意。如果它也适用于静态字段,那么那里就不会有instance 字样。事实上,同一个文档指出“对预定义的对象实例使用公共静态只读字段。如果有对象的预定义实例,请将它们声明为对象本身的公共静态只读字段。”
  • @ZoharPeled 我认为“预定义的对象实例”是一个特殊的用例(例如IntPtr.Zero 等)。您为此使用静态 readonly 字段,因为您真的不这样做不打算为它们更改 setter 或 getter,它们更像是常量而不是字段(但必须是字段,因为它们不是编译时常量)。
  • 我倾向于同意这一点,但这仍然是静态字段的有效用法(只读)-因此“不使用实例字段”不适用于静态字段...
  • @ZoharPeled 我实际上正是因为这个原因才写了这个问题 - 我有一个公共的只读静态字段,如果我需要明确地将其设为私有,或者像这样保留它,我真的很困惑。
  • @ZoharPeled 最后它是一个“指导方针”,而不是必须 100% 遵守的规则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
相关资源
最近更新 更多