代码整洁是否足以成为在字段上使用 属性 的充分理由?

Is code cleanliness a good enough reason to use a property over a field?

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

公开访问
public class Foo : IEnumerable<Bar>
{
    private List<Bar> _positions;

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

是通过将 _positions 变成类似

来创建的一致性吗
private List<Bar> Positions { get; set; }

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

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

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

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

老实说,就我个人而言,如果在 class 中找到私有 auto-getter/setter 属性,我会感到困惑;引用 MSDN:

Properties enable a class to expose a public way of getting and setting values, while hiding implementation or verification code.
--Properties (C# Programming Guide)

Generally, you should use fields only for variables that have private or protected accessibility.
--Fields (C# Programming Guide)

最后,如果你使用的是StyleCop,那么如果你以下划线开头的字段,那么它会警告:

Field names must not start with an underscore. [StyleCop Rule: SA1309]

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

就我个人而言,我只是称它为 positions 而不是 _positions - 哎呀,如果你真的希望所有名称都相互一致,你可以称它为 Positions (但与正常的命名约定不一致)。

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