【问题标题】:Is code cleanliness a good enough reason to use a property over a field? [closed]代码清洁度是在字段上使用属性的充分理由吗? [关闭]
【发布时间】:2015-01-22 15:02:40
【问题描述】:

我有一个枚举类,允许对其中包含的列表进行下标。因此,列表不需要通过字段或属性公开访问。

public class Foo : IEnumerable<Bar>
{
    private List<Bar> _positions;

如果我的类中有其他带有私有设置器的属性,未来的程序员会看到PascalCasePascalCasePascalCase_asdfghjk。嗯?这是什么东西? _asdfghjk 确实看起来很丑。

是否通过将_positions 变成类似的东西来创建一致性

private List<Bar> Positions { get; set; }

在字段上使用属性的充分理由?

【问题讨论】:

  • 为什么会有下划线?只需使用positions
  • 代码整洁听起来像是更改名称的好理由,但不一定是结构。

标签: c# .net properties coding-style


【解决方案1】:

只要您始终如一,阅读您的代码的人就不会感到惊讶。

如果您使用的约定是_privateField,那么只要您在任何地方都使用它,阅读您的代码的人就会习惯它。

如果你混合风格,危险就来了。

说实话,我个人会很困惑在类中找到私有的自动获取器/设置器属性;引用 MSDN:

属性使类能够公开获取和设置值的公共方式,同时隐藏实现或验证代码。
--Properties (C# Programming Guide)

通常,您应该只对具有私有受保护可访问性的变量使用字段。
--Fields (C# Programming Guide)

最后,如果你使用StyleCop,那么如果你用下划线开始一个字段,那么它会警告:

字段名称不能以下划线开头。 [StyleCop 规则:SA1309]

【讨论】:

  • ...if you are using StyleCop, then if you start a field with an underscore, then it will warn 这只是一个约定,可能因团队而异。它只是默认的 StyleCop 配置
【解决方案2】:

我不会仅仅为了它而引入完全私有的财产。如果它从状态计算属性值或执行验证等,这样做会很有用 - 但不要只是为了它而这样做。

就我个人而言,我将其称为 positions 而不是 _positions - 哎呀,如果您真的希望所有名称彼此一致(但与正常命名约定不一致),您可以将其称为 Positions

拥有一个被属性公开的字段应该不是一件特别罕见的事情 - 如果看到这样的事情困扰开发人员,我会担心。同样,并非每个属性都应该是自动实现的属性,因此开发人员应该习惯于将fooFoo 视为类的成员(foo 是私有的)。

【讨论】:

    猜你喜欢
    • 2017-10-31
    • 2011-03-12
    • 2012-10-05
    • 2016-11-04
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    相关资源
    最近更新 更多